62 PnpEventSize = 0x1000;
69 DPRINT(
"Calling NtGetPlugPlayEvent()\n");
77 PnpEventSize += 0x400;
79 if (NewPnpEvent ==
NULL)
84 PnpEvent = NewPnpEvent;
90 DPRINT1(
"NtGetPlugPlayEvent() failed (Status 0x%08lx)\n",
Status);
95 DPRINT(
"Received PnP Event\n");
100 DWORD DeviceIdLength;
183 DPRINT1(
"Unknown event, GUID {%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}\n",
193 sizeof(ResponseData));
196 DPRINT1(
"NtPlugPlayControl(PlugPlayControlUserResponse) failed (Status 0x%08lx)\n",
Status);
242 DPRINT1(
"ServiceControlHandler() called\n");
247 DPRINT1(
" SERVICE_CONTROL_STOP received\n");
255 DPRINT1(
" SERVICE_CONTROL_PAUSE received\n");
260 DPRINT1(
" SERVICE_CONTROL_CONTINUE received\n");
265 DPRINT1(
" SERVICE_CONTROL_INTERROGATE received\n");
271 DPRINT1(
" SERVICE_CONTROL_SHUTDOWN received\n");
279 DPRINT1(
" Control %lu received\n", dwControl);
305 DPRINT(
"GetBooleanRegValue(): RegOpenKeyExW() has failed to open '%S' key! (Error: %lu)\n",
318 DPRINT(
"GetBooleanRegValue(): RegQueryValueExW() has failed to query '%S' value! (Error: %lu)\n",
324 DPRINT(
"GetBooleanRegValue(): The value is not of REG_DWORD type!\n");
347 L"Software\\Policies\\Microsoft\\Windows\\DeviceInstall\\Settings",
350 if (bSuppressNewHWUI)
351 DPRINT(
"GetSuppressNewUIValue(): newdev.dll's wizard UI won't be shown!\n");
353 return bSuppressNewHWUI;
365 DPRINT(
"ServiceMain() called\n");
411 DPRINT(
"ServiceMain() done\n");
420 DPRINT(
"UMPNPMGR: InitializePnPManager() started\n");
429 DPRINT1(
"Could not create the Install Event! (Error %lu)\n", dwError);
436 L"Global\\PnP_No_Pending_Install_Events");
440 DPRINT1(
"Could not create the Pending-Install Event! (Error %lu)\n", dwError);
452 DPRINT1(
"Could not create the List Event! (Error %lu)\n", dwError);
460 DPRINT1(
"Could not create the List Mutex! (Error %lu)\n", dwError);
467 L"System\\CurrentControlSet\\Services\\PlugPlay\\Parameters",
471 DPRINT(
"UMPNPMGR: newdev.dll's wizard UI won't be shown!\n");
474 L"System\\CurrentControlSet\\Enum",
480 DPRINT1(
"Could not open the Enum Key! (Error %lu)\n", dwError);
485 L"System\\CurrentControlSet\\Control\\Class",
491 DPRINT1(
"Could not open the Class Key! (Error %lu)\n", dwError);
495 DPRINT(
"UMPNPMGR: InitializePnPManager() done\n");
static SERVICE_STATUS_HANDLE(WINAPI *pRegisterServiceCtrlHandlerExA)(LPCSTR
static BOOL SetupIsActive(VOID)
HANDLE hDeviceInstallListNotEmpty
DWORD WINAPI DeviceInstallThread(LPVOID lpParameter)
HANDLE hDeviceInstallListMutex
HANDLE hNoPendingInstalls
LIST_ENTRY DeviceInstallListHead
DWORD WINAPI RpcServerThread(LPVOID lpParameter)
#define RegCloseKey(hKey)
#define DBT_DEVNODES_CHANGED
#define NT_SUCCESS(StatCode)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
#define ERROR_CALL_NOT_IMPLEMENTED
#define DLL_PROCESS_ATTACH
#define DLL_PROCESS_DETACH
#define HeapFree(x, y, z)
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
static const WCHAR Cleanup[]
#define InsertTailList(ListHead, Entry)
#define InitializeListHead(ListHead)
static IN DWORD IN LPVOID lpvReserved
#define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE
static HANDLE ULONG_PTR dwData
@ PlugPlayControlUserResponse
NTSYSAPI NTSTATUS NTAPI RtlAdjustPrivilege(_In_ ULONG Privilege, _In_ BOOLEAN NewValue, _In_ BOOLEAN ForThread, _Out_ PBOOLEAN OldValue)
#define UNREFERENCED_PARAMETER(P)
NTSTATUS NTAPI NtGetPlugPlayEvent(IN ULONG Reserved1, IN ULONG Reserved2, OUT PPLUGPLAY_EVENT_BLOCK Buffer, IN ULONG BufferSize)
NTSTATUS NTAPI NtPlugPlayControl(IN PLUGPLAY_CONTROL_CLASS PlugPlayControlClass, IN OUT PVOID Buffer, IN ULONG BufferLength)
RPC_STATUS WINAPI RpcMgmtStopServerListening(RPC_BINDING_HANDLE Binding)
int WINAPI UuidEqual(UUID *Uuid1, UUID *Uuid2, RPC_STATUS *Status)
SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExW(LPCWSTR lpServiceName, LPHANDLER_FUNCTION_EX lpHandlerProc, LPVOID lpContext)
BOOL WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE hServiceStatus, LPSERVICE_STATUS lpServiceStatus)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define STATUS_BUFFER_TOO_SMALL
struct _PLUGPLAY_EVENT_BLOCK::@2370::@2373 TargetDevice
DWORD dwServiceSpecificExitCode
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateMutexW(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, IN BOOL bInitialOwner, IN LPCWSTR lpName OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH ReleaseMutex(IN HANDLE hMutex)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
#define FIELD_OFFSET(t, f)
static WCHAR ServiceName[]
static VOID UpdateServiceStatus(_In_ DWORD dwState, _In_ DWORD dwCheckPoint)
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
BOOL GetSuppressNewUIValue(VOID)
static DWORD WINAPI ServiceControlHandler(DWORD dwControl, DWORD dwEventType, LPVOID lpEventData, LPVOID lpContext)
static SERVICE_STATUS_HANDLE ServiceStatusHandle
static DWORD InitializePnPManager(VOID)
VOID WINAPI ServiceMain(DWORD argc, LPTSTR *argv)
static DWORD WINAPI PnpEventThread(LPVOID lpParameter)
static DWORD GetBooleanRegValue(IN HKEY hKey, IN PCWSTR lpSubKey, IN PCWSTR lpValue, OUT PBOOL pValue)
static SERVICE_STATUS ServiceStatus
_In_ WDFIOTARGET _In_ PWDF_REQUEST_COMPLETION_PARAMS Params
DWORD WINAPI GetLastError(void)
#define HKEY_LOCAL_MACHINE
#define SERVICE_STOP_PENDING
#define SERVICE_CONTROL_SHUTDOWN
#define SERVICE_START_PENDING
#define SERVICE_CONTROL_CONTINUE
#define SERVICE_CONTROL_STOP
#define SERVICE_ACCEPT_SHUTDOWN
#define SERVICE_PAUSE_PENDING
#define SERVICE_CONTROL_PAUSE
#define SERVICE_CONTROL_INTERROGATE
#define SERVICE_CONTINUE_PENDING
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define SERVICE_WIN32_OWN_PROCESS