80 lines
1.3 KiB
C++
80 lines
1.3 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 2000 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
WinFaxPro9.cpp
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Use QueryServiceStatus instead of ControlService if ControlService is
|
||
|
called for SERVICE_CONTROL_INTERROGATE.
|
||
|
|
||
|
No idea why this works on NT4.
|
||
|
|
||
|
Notes:
|
||
|
|
||
|
This is an app specific shim.
|
||
|
|
||
|
History:
|
||
|
|
||
|
02/16/2000 clupu Created
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "precomp.h"
|
||
|
|
||
|
IMPLEMENT_SHIM_BEGIN(WinFaxPro9)
|
||
|
#include "ShimHookMacro.h"
|
||
|
|
||
|
APIHOOK_ENUM_BEGIN
|
||
|
APIHOOK_ENUM_ENTRY(ControlService)
|
||
|
APIHOOK_ENUM_END
|
||
|
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Use QueryServiceStatus instead of ControlService if ControlService is
|
||
|
called for SERVICE_CONTROL_INTERROGATE.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
BOOL
|
||
|
APIHOOK(ControlService)(
|
||
|
SC_HANDLE hService,
|
||
|
DWORD dwControl,
|
||
|
LPSERVICE_STATUS lpServiceStatus
|
||
|
)
|
||
|
{
|
||
|
if (dwControl == SERVICE_CONTROL_INTERROGATE) {
|
||
|
|
||
|
DPFN(
|
||
|
eDbgLevelWarning,
|
||
|
"[ControlService] calling QueryServiceStatus instead of ControlService.\n");
|
||
|
|
||
|
return QueryServiceStatus(hService, lpServiceStatus);
|
||
|
|
||
|
} else {
|
||
|
return ORIGINAL_API(ControlService)(
|
||
|
hService,
|
||
|
dwControl,
|
||
|
lpServiceStatus);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Register hooked functions
|
||
|
|
||
|
--*/
|
||
|
|
||
|
HOOK_BEGIN
|
||
|
APIHOOK_ENTRY(ADVAPI32.DLL, ControlService)
|
||
|
HOOK_END
|
||
|
|
||
|
|
||
|
IMPLEMENT_SHIM_END
|
||
|
|