Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 2001 Microsoft Corporation
Module Name:
Keisoku7.cpp
Abstract:
The app has an executable bplayer.exe to launch its virtual CD driver. The problem is bplayer.exe is put in start-group and will be launched by explorer.exe, at the time the virtual CD driver is launched, explorer.exe has already finished initialization and cached all local drive info. Fixing this by broadcasting a WM_DEVICECHANGE message.
Notes: This is an app specific shim.
History:
06/20/2001 xiaoz Created
--*/
#include "precomp.h"
#include "Dbt.h"
IMPLEMENT_SHIM_BEGIN(Keisoku7) #include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN APIHOOK_ENUM_ENTRY(StartServiceA) APIHOOK_ENUM_END
/*++
Hook StartServiceA to broadcast a WM_DEVICECHANGE message
--*/
BOOL APIHOOK(StartServiceA)( SC_HANDLE hService, DWORD dwNumServiceArgs, LPCSTR *lpServiceArgVectors ) { BOOL bRet; DEV_BROADCAST_VOLUME devbVol; bRet = ORIGINAL_API(StartServiceA)(hService, dwNumServiceArgs, lpServiceArgVectors);
//
// If succeed, we will broadcast WM_DEVICECHANGE message
//
if (bRet) { devbVol.dbcv_size = sizeof(DEV_BROADCAST_VOLUME); devbVol.dbcv_devicetype = DBT_DEVTYP_VOLUME; devbVol.dbcv_reserved = 0; devbVol.dbcv_unitmask = 0x3FFFFF8; // All drives except A: B: C:
devbVol.dbcv_flags = 0; SendMessageTimeout(HWND_BROADCAST, WM_DEVICECHANGE, DBT_DEVICEARRIVAL, (LPARAM) &devbVol, SMTO_NOTIMEOUTIFNOTHUNG, 1000, NULL);
LOGN(eDbgLevelWarning, "WM_DEVICECHANGE broadcasted"); } return bRet; }
/*++
Register hooked functions
--*/
HOOK_BEGIN APIHOOK_ENTRY(ADVAPI32.DLL, StartServiceA) HOOK_END
IMPLEMENT_SHIM_END
|