36 if (pszDriverPath ==
NULL)
40 L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\");
47 DPRINT(
" Path: %wZ\n", &DriverPath);
53 &WasPrivilegeEnabled);
57 DPRINT1(
"SERVICES: Cannot acquire driver-loading privilege, Status = 0x%08lx\n",
Status);
67 &WasPrivilegeEnabled);
90 if (pszDriverPath ==
NULL)
94 L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\");
101 DPRINT(
" Path: %wZ\n", &DriverPath);
107 &WasPrivilegeEnabled);
111 DPRINT1(
"SERVICES: Cannot acquire driver-unloading privilege, Status = 0x%08lx\n",
Status);
126 &WasPrivilegeEnabled);
149 DWORD dwPreviousState;
151 DPRINT1(
"ScmGetDriverStatus() called\n");
154 if (lpServiceStatus !=
NULL)
182 DPRINT1(
"NtOpenDirectoryObject() failed!\n");
207 DPRINT(
"No more services\n");
300 if (lpServiceStatus !=
NULL)
307 DPRINT1(
"ScmGetDriverStatus() done (Error: %lu)\n", dwError);
318 DPRINT(
"ScmStartDriver(%p)\n", pService);
328 DPRINT(
"ScmStartDriver returns %lu\n", dwError);
341 DPRINT(
"ScmControlDriver() called\n");
386 DPRINT(
"ScmControlDriver() done (Erorr: %lu)\n", dwError);
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
DWORD ScmControlDriver(PSERVICE lpService, DWORD dwControl, LPSERVICE_STATUS lpServiceStatus)
#define STATUS_NO_MORE_ENTRIES
NTSTATUS NTAPI NtOpenDirectoryObject(OUT PHANDLE DirectoryHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
#define SE_LOAD_DRIVER_PRIVILEGE
#define SERVICE_ACCEPT_STOP
#define STATUS_INVALID_DEVICE_REQUEST
#define ERROR_NOT_ENOUGH_MEMORY
NTSYSAPI NTSTATUS NTAPI RtlAdjustPrivilege(_In_ ULONG Privilege, _In_ BOOLEAN NewValue, _In_ BOOLEAN ForThread, _Out_ PBOOLEAN OldValue)
DWORD dwServiceSpecificExitCode
DWORD ScmStartDriver(PSERVICE pService)
NTSTATUS NTAPI NtQueryDirectoryObject(IN HANDLE DirectoryHandle, OUT PVOID Buffer, IN ULONG BufferLength, IN BOOLEAN ReturnSingleEntry, IN BOOLEAN RestartScan, IN OUT PULONG Context, OUT PULONG ReturnLength OPTIONAL)
#define ERROR_SERVICE_NEVER_STARTED
static DWORD ScmUnloadDriver(PSERVICE lpService)
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
#define ERROR_INVALID_SERVICE_CONTROL
#define SERVICE_CONTROL_INTERROGATE
_In_ ULONG _In_opt_ WDFREQUEST _In_opt_ PVOID _In_ size_t _In_ PVOID _In_ size_t _Out_ size_t * DataLength
#define SERVICE_FILE_SYSTEM_DRIVER
#define DIRECTORY_TRAVERSE
static DWORD ScmLoadDriver(PSERVICE lpService)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define NT_SUCCESS(StatCode)
_In_ WDFCOLLECTION _In_ ULONG Index
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
NTSTATUS NTAPI NtUnloadDriver(IN PUNICODE_STRING DriverServiceName)
static DWORD ScmGetDriverStatus(PSERVICE lpService, LPSERVICE_STATUS lpServiceStatus)
struct _OBJECT_DIRECTORY_INFORMATION OBJECT_DIRECTORY_INFORMATION
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
_In_ PFCB _In_ PCD_NAME DirName
#define InitializeObjectAttributes(p, n, a, r, s)
#define RtlCopyMemory(Destination, Source, Length)
#define SERVICE_CONTROL_STOP
#define ERROR_GEN_FAILURE
NTSTATUS NTAPI NtLoadDriver(IN PUNICODE_STRING DriverServiceName)
#define SERVICE_STOP_PENDING
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define SERVICE_KERNEL_DRIVER