Skip to content

Commit 4b87ae3

Browse files
authored
[SHLEXTDBG] Added more SEI flags (reactos#8091)
1 parent 901af6a commit 4b87ae3

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

modules/rosapps/applications/devutils/shlextdbg/shlextdbg.cpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
104136
static 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

Comments
 (0)