71 Irp->IoStatus.Information = 0;
116 if (
DriverObject->DriverExtension->ServiceKeyName.Buffer)
263 *DriverName = driverName;
290 if (
String2->Length < String1->Length)
293 Length = String1->Length / 2;
294 pc1 = String1->Buffer;
325 "%s%sSystem32\\Drivers\\%wZ%s\r\n",
365 DPRINT(
"Normalizing image path '%wZ' for service '%wZ'\n", ImagePath,
ServiceName);
367 InputImagePath = *ImagePath;
368 if (InputImagePath.
Length == 0)
371 ImagePath->MaximumLength = DriversPathString.
Length +
376 ImagePath->MaximumLength,
378 if (ImagePath->Buffer ==
NULL)
385 else if (InputImagePath.
Buffer[0] !=
L'\\')
387 ImagePath->Length = 0;
388 ImagePath->MaximumLength = SystemRootString.
Length +
392 ImagePath->MaximumLength,
394 if (ImagePath->Buffer ==
NULL)
404 DPRINT(
"Normalized image path is '%wZ' for service '%wZ'\n", ImagePath,
ServiceName);
447 DPRINT(
"Driver name: '%wZ'\n", &DriverName);
469 Status = ZwQueryKey(ServiceHandle,
521 (
PVOID*)&driverObject);
528 DPRINT1(
"Error while creating driver object \"%wZ\" status %x\n", &DriverName,
Status);
532 DPRINT(
"Created driver object 0x%p for \"%wZ\"\n", driverObject, &DriverName);
544 driverObject->
DriverSize = ModuleObject->SizeOfImage;
545 driverObject->
DriverInit = ModuleObject->EntryPoint;
573 (
PVOID*)&driverObject,
589 serviceKeyName.
Length = 0;
595 if (!serviceKeyName.
Buffer)
612 driverNamePaged.
Length = 0;
618 if (!driverNamePaged.
Buffer)
632 *DriverEntryStatus =
Status;
635 DPRINT1(
"'%wZ' initialization failed, status (0x%08lx)\n", &DriverName,
Status);
644 driverObject->
Flags &= ~DRVO_LEGACY_DRIVER;
660 DPRINT1(
"Driver <%wZ> set DriverObject->MajorFunction[%lu] to NULL!\n",
681 *OutDriverObject = driverObject;
717 PVOID DriverBase = LdrEntry->DllBase;
741 BaseLength *=
sizeof(
WCHAR);
778 *ModuleObject = LdrEntry;
826 if (FileNameWithoutPath ==
NULL)
828 FileNameWithoutPath =
Buffer;
832 FileNameWithoutPath++;
846 if (FileExtension !=
NULL)
877 NextEntry = NextEntry->
Flink)
921 ULONG instanceCount = 0;
939 DPRINT(
"Processing %u instances for %wZ module\n", instanceCount,
ModuleName);
941 for (
ULONG i = 0;
i < instanceCount;
i++)
979 DPRINT1(
"No device node found matching instance path '%wZ'\n", &instancePath);
1019 DPRINT(
"IopInitializeBootDrivers()\n");
1052 for (NextEntry = ListHead->
Flink;
1053 NextEntry != ListHead;
1054 NextEntry = NextEntry->
Flink)
1071 for (NextEntry = ListHead->
Flink;
1072 NextEntry != ListHead;
1073 NextEntry = NextEntry->
Flink)
1140 NextEntry2 = NextEntry2->
Flink;
1144 NextEntry2 = NextEntry2->
Blink;
1156 NextEntry = NextEntry->
Flink)
1213 ZwLoadDriver(*DriverList);
1278 DPRINT1(
"No unload privilege!\n");
1291 DPRINT(
"IopUnloadDriver('%wZ', %u)\n", &CapturedServiceName, UnloadPnpDrivers);
1304 &CapturedServiceName,
1368 DPRINT1(
"Driver deletion pending\n");
1386 CapturedServiceName.
Buffer,
1396 DPRINT1(
"RtlQueryRegistryValues() failed (Status %x)\n",
Status);
1408 DPRINT1(
"IopNormalizeImagePath() failed (Status %x)\n",
Status);
1437 DPRINT1(
"Drivers device object is referenced or has attached devices\n");
1439 SafeToUnload =
FALSE;
1470 DPRINT1(
"No DriverUnload function! '%wZ' will not be unloaded!\n", &
DriverObject->DriverName);
1566 WCHAR NameBuffer[100];
1585 LocalDriverName.
Length = NameLength *
sizeof(
WCHAR);
1587 LocalDriverName.
Buffer = NameBuffer;
1592 LocalDriverName = *DriverName;
1635 if (!ServiceKeyName.
Buffer)
1646 DriverObject->DriverExtension->ServiceKeyName = ServiceKeyName;
1701 DPRINT(
"Calling driver entrypoint at %p\n", InitializationFunction);
1706 DPRINT1(
"'%wZ' initialization failed, status (0x%08lx)\n", &LocalDriverName,
Status);
1725 DPRINT1(
"Driver <%wZ> set DriverObject->MajorFunction[%lu] to NULL!\n",
1764 if (!ReinitItem)
return;
1793 if (!ReinitItem)
return;
1814 IN ULONG DriverObjectExtensionSize,
1822 *DriverObjectExtension =
NULL;
1827 DriverObjectExtensionSize,
1843 ClientDriverExtension;
1844 while (DriverExtensions)
1859 if (!DriverExtensions)
1881 *DriverObjectExtension = NewDriverExtension + 1;
1901 while (DriverExtensions)
1919 if (!DriverExtensions)
return NULL;
1920 return DriverExtensions + 1;
1969 DPRINT(
"IopNormalizeImagePath() failed (Status %x)\n",
Status);
1973 DPRINT(
"FullImagePath: '%wZ'\n", &ImagePath);
1981 DPRINT(
"Loading module from %wZ\n", &ImagePath);
1987 DPRINT(
"MmLoadSystemImage() failed (Status %lx)\n",
Status);
2001 Status = ZwQueryKey(ServiceHandle,
2011 .Buffer = servName->
Name
2024 &driverEntryStatus);
2027 DPRINT1(
"IopInitializeDriverModule() failed (Status %lx)\n",
Status);
2114 return LoadParams.
Status;
2147 DPRINT1(
"No load privilege!\n");
2160 DPRINT(
"NtLoadDriver('%wZ')\n", &CapturedServiceName);
NTSTATUS NtUnloadDriver(IN PUNICODE_STRING DriverServiceName)
#define STATUS_PRIVILEGE_NOT_HELD
ACPI_BUFFER *RetBuffer ACPI_BUFFER *RetBuffer char ACPI_WALK_RESOURCE_CALLBACK void *Context ACPI_BUFFER *RetBuffer UINT16 ACPI_RESOURCE **ResourcePtr ACPI_GENERIC_ADDRESS *Reg UINT32 *ReturnValue UINT8 UINT8 *Slp_TypB ACPI_PHYSICAL_ADDRESS PhysicalAddress64 UINT32 UINT32 *TimeElapsed UINT32 ACPI_STATUS const char UINT32 ACPI_STATUS const char UINT32 const char const char * ModuleName
#define OBJ_NAME_PATH_SEPARATOR
static WCHAR ServiceName[]
PUNICODE_STRING *NTAPI CmGetSystemDriverList(VOID)
char TextBuffer[BUFFERLEN]
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define NT_SUCCESS(StatCode)
static const unsigned char pc1[56]
static const unsigned char pc2[48]
static const WCHAR DeviceInstance[]
static const WCHAR Cleanup[]
#define UNIMPLEMENTED_DBGBREAK(...)
#define __drv_allocatesMem(kind)
#define InsertHeadList(ListHead, Entry)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define MAXIMUM_FILENAME_LENGTH
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define KeInitializeEvent(pEvt, foo, foo2)
NTSTATUS RtlUpcaseUnicodeString(PUNICODE_STRING dst, PUNICODE_STRING src, BOOLEAN Alloc)
#define KeLowerIrql(oldIrql)
NTSTATUS RtlAppendUnicodeToString(IN PUNICODE_STRING Str1, IN PWSTR Str2)
#define KeSetEvent(pEvt, foo, foo2)
#define ExAcquireResourceExclusiveLite(res, wait)
#define InitializeListHead(ListHead)
#define ExGetPreviousMode
struct _FileName FileName
IN OUT PLONG IN OUT PLONG Addend IN OUT PLONG IN LONG IN OUT PLONG IN LONG Increment KeRaiseIrqlToDpcLevel
GLenum GLuint GLenum GLsizei const GLchar * buf
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static LPWSTR ClientIdentificationAddress
NTHALAPI VOID NTAPI HalDisplayString(PUCHAR String)
VOID NTAPI InbvIndicateProgress(VOID)
Gives some progress feedback, without specifying any explicit number of progress steps or percentage....
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define OBJ_KERNEL_HANDLE
#define OBJ_CASE_INSENSITIVE
NTSYSAPI NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID)
PLIST_ENTRY NTAPI ExInterlockedInsertTailList(IN OUT PLIST_ENTRY ListHead, IN OUT PLIST_ENTRY ListEntry, IN OUT PKSPIN_LOCK Lock)
PLIST_ENTRY NTAPI ExInterlockedRemoveHeadList(IN OUT PLIST_ENTRY ListHead, IN OUT PKSPIN_LOCK Lock)
#define KeLeaveCriticalRegion()
#define KeEnterCriticalRegion()
PLOADER_PARAMETER_BLOCK KeLoaderBlock
#define FILESYSTEM_ROOT_NAME
#define LDRP_DRIVER_DEPENDENT_DLL
#define MM_SYSLDR_NO_IMPORTS
#define ExFreePoolWithTag(_P, _T)
#define InitializeObjectAttributes(p, n, a, r, s)
#define _At_(target, annos)
#define _When_(expr, annos)
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
#define KeGetPreviousMode()
#define DOE_UNLOAD_PENDING
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
_In_ const STRING * String2
_In_ PCWSTR _Inout_ _At_ QueryTable _Pre_unknown_ PRTL_QUERY_REGISTRY_TABLE QueryTable
DRIVER_INFORMATION DriverInfo
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeStringToString(PUNICODE_STRING Destination, PUNICODE_STRING Source)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
#define RTL_REGISTRY_ABSOLUTE
#define RTL_QUERY_REGISTRY_DIRECT
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
NTKERNELAPI volatile KSYSTEM_TIME KeTickCount
NTSTATUS NTAPI IopOpenRegistryKeyEx(PHANDLE KeyHandle, HANDLE ParentKey, PUNICODE_STRING Name, ACCESS_MASK DesiredAccess)
NTSTATUS NTAPI RawFsDriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
@ PiActionEnumRootDevices
USHORT NTAPI PpInitGetGroupOrderIndex(IN HANDLE ServiceHandle)
USHORT NTAPI PipGetDriverTagPriority(IN HANDLE ServiceHandle)
NTSTATUS NTAPI IopGetRegistryValue(IN HANDLE Handle, IN PWSTR ValueName, OUT PKEY_VALUE_FULL_INFORMATION *Information)
#define IoGetDrvObjExtension(DriverObject)
VOID PiQueueDeviceAction(_In_ PDEVICE_OBJECT DeviceObject, _In_ DEVICE_ACTION Action, _In_opt_ PKEVENT CompletionEvent, _Out_opt_ NTSTATUS *CompletionStatus)
Queue a device operation to a worker thread.
PDEVICE_NODE IopRootDeviceNode
NTSTATUS PiPerformSyncDeviceAction(_In_ PDEVICE_OBJECT DeviceObject, _In_ DEVICE_ACTION Action)
Perfom a device operation synchronously via PiQueueDeviceAction.
VOID NTAPI IopReadyDeviceObjects(IN PDRIVER_OBJECT Driver)
#define IoGetDevObjExtension(DeviceObject)
NTSTATUS NTAPI MmLoadSystemImage(IN PUNICODE_STRING FileName, IN PUNICODE_STRING NamePrefix OPTIONAL, IN PUNICODE_STRING LoadedName OPTIONAL, IN ULONG Flags, OUT PVOID *ModuleObject, OUT PVOID *ImageBaseAddress)
VOID NTAPI MmFreeDriverInitialization(IN PLDR_DATA_TABLE_ENTRY LdrEntry)
NTSTATUS NTAPI MmUnloadSystemImage(IN PVOID ImageHandle)
NTSTATUS NTAPI MmCallDllInitialize(IN PLDR_DATA_TABLE_ENTRY LdrEntry, IN PLIST_ENTRY ListHead)
#define RTL_FIND_CHAR_IN_UNICODE_STRING_START_AT_END
NTSTATUS NTAPI RtlFindCharInUnicodeString(_In_ ULONG Flags, _In_ PCUNICODE_STRING SearchString, _In_ PCUNICODE_STRING MatchString, _Out_ PUSHORT Position)
const LUID SeLoadDriverPrivilege
LIST_ENTRY DriverReinitListHead
struct _LOAD_UNLOAD_PARAMS LOAD_UNLOAD_PARAMS
POBJECT_TYPE IoDriverObjectType
VOID NTAPI IopReinitializeBootDrivers(VOID)
PDEVICE_OBJECT IopGetDeviceObjectFromDeviceInstance(PUNICODE_STRING DeviceInstance)
NTSTATUS IopLoadDriver(_In_ HANDLE ServiceHandle, _Out_ PDRIVER_OBJECT *DriverObject)
PVOID NTAPI IoGetDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress)
static BOOLEAN IopInitializeBuiltinDriver(IN PLDR_DATA_TABLE_ENTRY BootLdrEntry)
KEVENT PiEnumerationFinished
VOID NTAPI IoRegisterDriverReinitialization(IN PDRIVER_OBJECT DriverObject, IN PDRIVER_REINITIALIZE ReinitRoutine, IN PVOID Context)
ERESOURCE IopDriverLoadResource
struct _LOAD_UNLOAD_PARAMS * PLOAD_UNLOAD_PARAMS
NTSTATUS NTAPI IoAllocateDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress, IN ULONG DriverObjectExtensionSize, OUT PVOID *DriverObjectExtension)
static const WCHAR ServicesKeyName[]
NTSTATUS NTAPI IoCreateDriver(_In_opt_ PUNICODE_STRING DriverName, _In_ PDRIVER_INITIALIZE InitializationFunction)
VOID FASTCALL IopInitializeSystemDrivers(VOID)
PLIST_ENTRY IopGroupTable
PLIST_ENTRY DriverBootReinitTailEntry
KSPIN_LOCK DriverBootReinitListLock
NTSTATUS NTAPI IopUnloadDriver(PUNICODE_STRING DriverServiceName, BOOLEAN UnloadPnpDrivers)
NTSTATUS NTAPI MiResolveImageReferences(IN PVOID ImageBase, IN PUNICODE_STRING ImageFileDirectory, IN PUNICODE_STRING NamePrefix OPTIONAL, OUT PCHAR *MissingApi, OUT PWCHAR *MissingDriver, OUT PLOAD_IMPORTS *LoadImports)
VOID NTAPI IoDeleteDriver(_In_ PDRIVER_OBJECT DriverObject)
NTSTATUS NTAPI IopInvalidDeviceRequest(PDEVICE_OBJECT DeviceObject, PIRP Irp)
VOID NTAPI IoRegisterBootDriverReinitialization(IN PDRIVER_OBJECT DriverObject, IN PDRIVER_REINITIALIZE ReinitRoutine, IN PVOID Context)
NTSTATUS IopInitializeDriverModule(_In_ PLDR_DATA_TABLE_ENTRY ModuleObject, _In_ HANDLE ServiceHandle, _Out_ PDRIVER_OBJECT *OutDriverObject, _Out_ NTSTATUS *DriverEntryStatus)
Initialize a loaded driver.
LIST_ENTRY DriverBootReinitListHead
KSPIN_LOCK DriverReinitListLock
BOOLEAN NTAPI IopSuffixUnicodeString(IN PCUNICODE_STRING String1, IN PCUNICODE_STRING String2)
VOID NTAPI IopDeleteDriver(IN PVOID ObjectBody)
NTSTATUS IopGetDriverNames(_In_ HANDLE ServiceHandle, _Out_ PUNICODE_STRING DriverName, _Out_opt_ PUNICODE_STRING ServiceName)
VOID FASTCALL IopInitializeBootDrivers(VOID)
BOOLEAN ExpInTextModeSetup
VOID NTAPI IopReinitializeDrivers(VOID)
NTSTATUS IopDoLoadUnloadDriver(_In_opt_ PUNICODE_STRING RegistryPath, _Inout_ PDRIVER_OBJECT *DriverObject)
Process load and unload driver operations. This is mostly for NtLoadDriver and NtUnloadDriver,...
NTSTATUS NTAPI NtLoadDriver(IN PUNICODE_STRING DriverServiceName)
static VOID NTAPI IopLoadUnloadDriverWorker(_Inout_ PVOID Parameter)
NTSTATUS NTAPI LdrProcessDriverModule(PLDR_DATA_TABLE_ENTRY LdrEntry, PUNICODE_STRING FileName, PLDR_DATA_TABLE_ENTRY *ModuleObject)
NTSTATUS FASTCALL IopNormalizeImagePath(_Inout_ _When_(return >=0, _At_(ImagePath->Buffer, _Post_notnull_ __drv_allocatesMem(Mem))) PUNICODE_STRING ImagePath, _In_ PUNICODE_STRING ServiceName)
PLIST_ENTRY DriverReinitTailEntry
UNICODE_STRING IopHardwareDatabaseKey
VOID FASTCALL IopDisplayLoadingMessage(PUNICODE_STRING ServiceName)
BOOLEAN PnPBootDriversLoaded
#define IoCompleteRequest
BOOLEAN NTAPI SeSinglePrivilegeCheck(_In_ LUID PrivilegeValue, _In_ KPROCESSOR_MODE PreviousMode)
Checks if a single privilege is present in the context of the calling thread.
#define STATUS_DELETE_PENDING
#define STATUS_FAILED_DRIVER_ENTRY
#define STATUS_ILL_FORMED_SERVICE_ENTRY
NTSTRSAFEVAPI RtlStringCchPrintfW(_Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
NTSTATUS NTAPI ObInsertObject(IN PVOID Object, IN PACCESS_STATE AccessState OPTIONAL, IN ACCESS_MASK DesiredAccess, IN ULONG ObjectPointerBias, OUT PVOID *NewObject OPTIONAL, OUT PHANDLE Handle)
NTSTATUS NTAPI ObCreateObject(IN KPROCESSOR_MODE ProbeMode OPTIONAL, IN POBJECT_TYPE Type, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN KPROCESSOR_MODE AccessMode, IN OUT PVOID ParseContext OPTIONAL, IN ULONG ObjectSize, IN ULONG PagedPoolCharge OPTIONAL, IN ULONG NonPagedPoolCharge OPTIONAL, OUT PVOID *Object)
VOID NTAPI ObMakeTemporaryObject(IN PVOID ObjectBody)
NTSTATUS NTAPI ObReferenceObjectByName(IN PUNICODE_STRING ObjectPath, IN ULONG Attributes, IN PACCESS_STATE PassedAccessState, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, IN OUT PVOID ParseContext, OUT PVOID *ObjectPtr)
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
PPCI_DRIVER_EXTENSION DriverExtension
LIST_ENTRY PsLoadedModuleList
PEPROCESS PsInitialSystemProcess
static __inline NTSTATUS ProbeAndCaptureUnicodeString(OUT PUNICODE_STRING Dest, IN KPROCESSOR_MODE CurrentMode, IN const UNICODE_STRING *UnsafeSrc)
static __inline VOID ReleaseCapturedUnicodeString(IN PUNICODE_STRING CapturedString, IN KPROCESSOR_MODE CurrentMode)
#define STATUS_BUFFER_TOO_SMALL
PULONG MinorVersion OPTIONAL
base of all file and directory entries
UNICODE_STRING RegistryPath
struct _LDR_DATA_TABLE_ENTRY * LdrEntry
PDEVICE_OBJECT PhysicalDeviceObject
struct _DRIVER_OBJECT * DriverObject
UNICODE_STRING ServiceKeyName
PUNICODE_STRING HardwareDatabase
PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION+1]
PDRIVER_INITIALIZE DriverInit
PDRIVER_EXTENSION DriverExtension
PDEVICE_OBJECT DeviceObject
PDRIVER_UNLOAD DriverUnload
UNICODE_STRING DriverName
PDRIVER_OBJECT DriverObject
PDRIVER_REINITIALIZE ReinitRoutine
PVOID ClientIdentificationAddress
struct _IO_CLIENT_EXTENSION * NextExtension
UNICODE_STRING BaseDllName
struct _LIST_ENTRY * Blink
struct _LIST_ENTRY * Flink
LIST_ENTRY BootDriverListHead
LIST_ENTRY LoadOrderListHead
struct _SETUP_LOADER_BLOCK * SetupLdrBlock
PUNICODE_STRING RegistryPath
PDRIVER_OBJECT DriverObject
#define TAG_DRIVER_EXTENSION
#define RTL_CONSTANT_STRING(s)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define RtlMoveMemory(Destination, Source, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_INVALID_DEVICE_REQUEST
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
#define STATUS_OBJECT_NAME_COLLISION
#define STATUS_INSUFFICIENT_RESOURCES
static int Link(const char **args)
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_In_ LPWSTR _In_ ULONG _In_ ULONG _In_ ULONG _Out_ DEVINFO _In_ HDEV _In_ LPWSTR _In_ HANDLE hDriver
VOID NTAPI ExQueueWorkItem(IN PWORK_QUEUE_ITEM WorkItem, IN WORK_QUEUE_TYPE QueueType)
_In_ PVOID _Out_opt_ PULONG_PTR _Outptr_opt_ PCUNICODE_STRING * ObjectName
#define SERVICE_RECOGNIZER_DRIVER
#define SERVICE_FILE_SYSTEM_DRIVER
#define ExInitializeWorkItem(Item, Routine, Context)
#define DRVO_BUILTIN_DRIVER
struct _DRIVER_OBJECT DRIVER_OBJECT
VOID(NTAPI * PDRIVER_REINITIALIZE)(_In_ struct _DRIVER_OBJECT *DriverObject, _In_opt_ PVOID Context, _In_ ULONG Count)
struct _DRIVER_EXTENSION * PDRIVER_EXTENSION
#define DRVO_BOOTREINIT_REGISTERED
#define DRVO_UNLOAD_INVOKED
#define DRVO_REINIT_REGISTERED
#define DRVO_LEGACY_DRIVER
#define IRP_MJ_MAXIMUM_FUNCTION
DRIVER_INITIALIZE * PDRIVER_INITIALIZE
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define ROUND_TO_PAGES(Size)
#define ObDereferenceObject
#define PsGetCurrentProcess
_In_ KPROCESSOR_MODE PreviousMode