@@ -101,6 +101,38 @@ static bool CLSIDPrefix(T& String, CLSID& Clsid)
101101 return false ;
102102}
103103
104+ struct CLoggingServiceProvider : public IServiceProvider
105+ {
106+ HRESULT WINAPI QueryInterface (REFIID riid, void **ppv) override
107+ {
108+ static const QITAB c_tab[] =
109+ {
110+ QITABENT (CLoggingServiceProvider, IServiceProvider),
111+ { NULL }
112+ };
113+ return ::QISearch (this , c_tab, riid, ppv);
114+ }
115+ ULONG WINAPI AddRef () override { return 1 ; }
116+ ULONG WINAPI Release () override { return 1 ; }
117+
118+ HRESULT WINAPI QueryService (REFGUID rcls, REFIID riid, void **ppv) override
119+ {
120+ WCHAR szCls[42 ], szIid[42 ];
121+ wprintf (L" INFO: QS %ls:%ls\n " ,
122+ StringFromGUID2 (rcls, szCls, _countof (szCls)) ? szCls : L" ?" ,
123+ StringFromGUID2 (riid, szIid, _countof (szIid)) ? szIid : L" ?" );
124+ if (ppv)
125+ *ppv = NULL ;
126+ return E_NOINTERFACE;
127+ }
128+ };
129+
130+ static IServiceProvider* GetLoggingServiceProvider ()
131+ {
132+ static CLoggingServiceProvider g_SP;
133+ return &g_SP;
134+ }
135+
104136static HRESULT GetUIObjectOfAbsolute (LPCITEMIDLIST pidl, REFIID riid, void ** ppv)
105137{
106138 CComPtr<IShellFolder> shellFolder;
@@ -675,6 +707,10 @@ int wmain(int argc, WCHAR **argv)
675707 {
676708 if (argv[n][0 ] != ' -' && argv[n][0 ] != ' /' )
677709 break ;
710+ else if (isCmd (argc, argv, n, L" MIN" ))
711+ sei.nShow = SW_SHOWMINNOACTIVE;
712+ else if (isCmd (argc, argv, n, L" MAX" ))
713+ sei.nShow = SW_SHOWMAXIMIZED;
678714 else if (isCmd (argc, argv, n, L" INVOKE" ))
679715 sei.fMask |= SEE_MASK_INVOKEIDLIST;
680716 else if (isCmd (argc, argv, n, L" NOUI" ))
@@ -683,6 +719,22 @@ int wmain(int argc, WCHAR **argv)
683719 sei.fMask |= SEE_MASK_ASYNCOK ;
684720 else if (isCmd (argc, argv, n, L" NOASYNC" ))
685721 sei.fMask |= SEE_MASK_NOASYNC;
722+ else if (isCmd (argc, argv, n, L" NOCONSOLE" ))
723+ sei.fMask |= SEE_MASK_NO_CONSOLE;
724+ else if (isCmd (argc, argv, n, L" 1000" ))
725+ sei.fMask |= 0x00001000 ; // Unknown flag
726+ else if (isCmd (argc, argv, n, L" NOHOOKS" ))
727+ sei.fMask |= 0x00002000 ;
728+ else if (isCmd (argc, argv, n, L" SITE" ))
729+ {
730+ sei.fMask |= 0x08000000 ; // SEE_MASK_FLAG_HINST_IS_SITE
731+ sei.hInstApp = (HINSTANCE)GetLoggingServiceProvider ();
732+ }
733+ else if (isCmd (argc, argv, n, L" FILL" ))
734+ {
735+ sei.hInstApp = (HINSTANCE)UlongToHandle (0xCAFE );
736+ sei.hProcess = UlongToHandle (0xDEADF00D );
737+ }
686738 else
687739 wprintf (L" WARN: Ignoring switch %s\n " , argv[n]);
688740 }
0 commit comments