17#define WDFLDR_TAG 'LfdW'
20#define __PrintUnfiltered(...) \
21 DbgPrintEx(DPFLTR_DEFAULT_ID, DPFLTR_ERROR_LEVEL, __VA_ARGS__)
25 if (WdfLdrDiags.DiagFlags & DIAGFLAG_ENABLED) { \
26 DbgPrint("WdfLdr: %s - ", __FUNCTION__); \
27 __PrintUnfiltered _x_; \
31#define DPRINT_VERBOSE(_x_) \
33 if (WdfLdrDiags.DiagFlags & DIAGFLAG_VERBOSE_LOGGING) { \
34 DbgPrint("WdfLdr: %s - ", __FUNCTION__); \
35 __PrintUnfiltered _x_; \
39#define DPRINT_ERROR(_x_) \
41 if (WdfLdrDiags.DiagFlags & DIAGFLAG_LOG_ERRORS) { \
42 DbgPrint("WdfLdr: ERROR: %s - ", __FUNCTION__); \
43 __PrintUnfiltered _x_; \
47#define DPRINT_TRACE_ENTRY() \
49 if (WdfLdrDiags.DiagFlags & DIAGFLAG_TRACE_FUNCTION_ENTRY) { \
50 DbgPrint("WdfLdr: ENTER: %s\n", __FUNCTION__); \
54#define DPRINT_TRACE_EXIT() \
56 if (WdfLdrDiags.DiagFlags & DIAGFLAG_TRACE_FUNCTION_EXIT) { \
57 DbgPrint("WdfLdr: EXIT: %s\n", __FUNCTION__); \
62#define __DBGPRINT(_x_) \
64 if (WdfLdrDiags.DiagFlags & DIAGFLAG_ENABLED) { \
65 DbgPrint("Wdfldr: %s - ", __FUNCTION__); \
66 __PrintUnfiltered _x_; \
79#define DIAGFLAG_ENABLED 0x00000001
80#define DIAGFLAG_VERBOSE_LOGGING 0x00000002
81#define DIAGFLAG_TRACE_FUNCTION_ENTRY 0x00000004
82#define DIAGFLAG_TRACE_FUNCTION_EXIT 0x00000008
83#define DIAGFLAG_LOG_ERRORS 0x00000010
84#define DIAGFLAG_LOG_WARNINGS 0x00000020
PRTL_UNICODE_STRING_BUFFER Path
static WCHAR ServiceName[]
CLIPBOARD_GLOBALS Globals
static DRIVER_DISPATCH ClassClose
static DRIVER_DISPATCH ClassCreate
PLIBRARY_MODULE LibModule
_In_ PCUNICODE_STRING ServicePath
_In_ PCUNICODE_STRING _Out_ PLIBRARY_MODULE * OutLibraryModule
static const char * ImageName
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
PWDF_CLASS_BIND_INFO ClientClassBindInfo
WDF_CLASS_VERSION Version
LIST_ENTRY LibraryLinkage
PFILE_OBJECT ClassFileObject
PDRIVER_OBJECT ClassDriverObject
LIST_ENTRY ClientsListHead
BOOLEAN ImageAlreadyLoaded
PWDF_CLASS_LIBRARY_INFO ClassLibraryInfo
ERESOURCE ClientsListLock
PDRIVER_OBJECT LibraryDriverObject
UNICODE_STRING ServicePath
ERESOURCE ClientsListLock
PFILE_OBJECT LibraryFileObject
LIST_ENTRY LibraryListEntry
PWDF_LIBRARY_INFO LibraryInfo
LIST_ENTRY ClientsListHead
struct _WDFLDR_DIAGS::@5232::@5234 DiagFlagsByName
ERESOURCE LoadedModulesListLock
LIST_ENTRY LoadedModulesList
OSVERSIONINFOEXW OsVersion
PWDF_CLASS_BIND ClassBind
WDF_INTERFACE_HEADER Header
PWDF_CLASS_UNBIND ClassUnbind
PWDF_LDR_DIAGNOSTICS_VALUE_BY_NAME_AS_ULONG DiagnosticsValueByNameAsULONG
WDF_INTERFACE_HEADER Header
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
NTSTATUS(NTAPI * PWDF_LDR_DIAGNOSTICS_VALUE_BY_NAME_AS_ULONG)(_In_ PUNICODE_STRING ValueName, _Out_ PULONG Value)
NTSTATUS FxLdrQueryData(_In_ HANDLE KeyHandle, _In_ PUNICODE_STRING ValueName, _In_ ULONG Tag, _Out_ PKEY_VALUE_PARTIAL_INFORMATION *KeyValPartialInfo)
VOID ClassReleaseClientReference(_In_ PCLASS_MODULE ClassModule)
struct _CLIENT_MODULE CLIENT_MODULE
VOID FxLdrAcquireLoadedModuleLock(VOID)
NTSTATUS NTAPI DereferenceVersion(_In_ PWDF_BIND_INFO Info, _In_opt_ PWDF_COMPONENT_GLOBALS Globals)
Dereference a WDF library version.
NTSTATUS LibraryOpen(_Inout_ PLIBRARY_MODULE LibModule, _In_ PCUNICODE_STRING ObjectName)
Opens KMDF library's driver object by its name and fills some library structure data.
VOID ClassRemoveFromLibraryList(_In_ PCLASS_MODULE ClassModule)
struct _WDF_LOADER_INTERFACE_CLASS_BIND * PWDF_LOADER_INTERFACE_CLASS_BIND
NTSTATUS LibraryFindOrLoad(_In_ PCUNICODE_STRING ServicePath, _Out_ PLIBRARY_MODULE *LibModule)
VOID LibraryDereference(_In_ PLIBRARY_MODULE LibModule)
NTSTATUS GetImageName(_In_ PCUNICODE_STRING ServicePath, _In_ PUNICODE_STRING ImageName)
NTSTATUS LibraryCreate(_In_opt_ PWDF_LIBRARY_INFO LibraryInfo, _In_ PCUNICODE_STRING ServicePath, _Out_ PLIBRARY_MODULE *OutLibraryModule)
struct _CLASS_CLIENT_MODULE * PCLASS_CLIENT_MODULE
NTSTATUS BuildServicePath(_In_ PKEY_VALUE_PARTIAL_INFORMATION KeyValueInformation, _In_ PUNICODE_STRING ServicePath)
struct _LIBRARY_MODULE * PLIBRARY_MODULE
struct _WDF_LOADER_INTERFACE_DIAGNOSTIC WDF_LOADER_INTERFACE_DIAGNOSTIC
VOID GetNameFromPath(_In_ PCUNICODE_STRING Path, _Out_ PUNICODE_STRING Name)
VOID LibraryReleaseClientLock(_In_ PLIBRARY_MODULE LibModule)
NTSTATUS GetVersionServicePath(_In_ PWDF_BIND_INFO BindInfo, _Out_ PUNICODE_STRING ServicePath)
Get service path from bind info and registry.
PLIBRARY_MODULE FindLibraryByServicePathLocked(_In_ PCUNICODE_STRING ServicePath)
struct _WDF_LOADER_INTERFACE_DIAGNOSTIC * PWDF_LOADER_INTERFACE_DIAGNOSTIC
struct _CLASS_CLIENT_MODULE CLASS_CLIENT_MODULE
struct _WDF_LDR_GLOBALS * PWDF_LDR_GLOBALS
struct _WDFLDR_DIAGS WDFLDR_DIAGS
struct _CLASS_MODULE * PCLASS_MODULE
struct _WDFLDR_DIAGS * PWDFLDR_DIAGS
VOID LibraryClose(_Inout_ PLIBRARY_MODULE LibModule)
Dereferences KMDF library's device object.
struct _WDF_LOADER_INTERFACE_CLASS_BIND WDF_LOADER_INTERFACE_CLASS_BIND
PLIST_ENTRY LibraryUnloadClasses(_In_ PLIBRARY_MODULE LibModule)
PLIST_ENTRY LibraryAddToClassListLocked(_In_ PLIBRARY_MODULE LibModule, _In_ PCLASS_MODULE ClassModule)
NTSTATUS(NTAPI * PWDF_CLASS_BIND)(PWDF_BIND_INFO BindInfo, PWDF_COMPONENT_GLOBALS *Globals, PWDF_CLASS_BIND_INFO ClassBindInfo)
VOID FxLdrReleaseLoadedModuleLock(VOID)
PCLASS_CLIENT_MODULE ClassClientCreate()
NTSTATUS ReferenceClassVersion(_In_ PWDF_CLASS_BIND_INFO ClassBindInfo, _In_ PWDF_BIND_INFO BindInfo, _Out_ PCLASS_MODULE *ClassModule)
struct _CLIENT_MODULE * PCLIENT_MODULE
VOID(NTAPI * PWDF_CLASS_UNBIND)(PWDF_BIND_INFO BindInfo, PWDF_COMPONENT_GLOBALS Globals, PWDF_CLASS_BIND_INFO ClassBindInfo)
VOID NTAPI LibraryReleaseReference(_In_ PLIBRARY_MODULE LibModule)
Release a reference to a library module.
PCLASS_MODULE FindClassByServiceNameLocked(_In_ PUNICODE_STRING Path, _Out_ PLIBRARY_MODULE *LibModule)
struct _CLASS_MODULE CLASS_MODULE
BOOLEAN LibraryUnlinkClient(_In_ PLIBRARY_MODULE LibModule, _In_ PWDF_BIND_INFO BindInfo)
BOOLEAN ServiceCheckBootStart(_In_ PUNICODE_STRING Service)
VOID LibraryReference(_In_ PLIBRARY_MODULE LibModule)
VOID LibraryFree(_In_ PLIBRARY_MODULE LibModule)
NTSTATUS LibraryLinkInClient(_In_ PLIBRARY_MODULE LibModule, _In_ PUNICODE_STRING ServicePath, _In_ PWDF_BIND_INFO BindInfo, _In_ PVOID Context, _Out_ PCLIENT_MODULE *OutClientModule)
Create client module and add it to library client list.
NTSTATUS ClassOpen(_Inout_ PCLASS_MODULE ClassModule, _In_ PUNICODE_STRING ObjectName)
struct _WDF_LDR_GLOBALS WDF_LDR_GLOBALS
struct _LIBRARY_MODULE LIBRARY_MODULE
NTSTATUS FxLdrQueryUlong(_In_ HANDLE KeyHandle, _In_ PUNICODE_STRING ValueName, _Out_ PULONG Value)
NTSTATUS NTAPI FindModuleByClientService(_In_ PUNICODE_STRING RegistryPath, _Out_ PLIBRARY_MODULE *Library)
VOID NTAPI ClassAddReference(_In_ PCLASS_MODULE ClassModule)
NTSTATUS GetImageInfo(_In_ PCUNICODE_STRING ImageName, _Out_ PVOID *ImageBase, _Out_ PULONG ImageSize)
VOID DereferenceClassVersion(_In_ PWDF_CLASS_BIND_INFO ClassBindInfo, _In_ PWDF_BIND_INFO BindInfo, _In_ PWDF_COMPONENT_GLOBALS Globals)
WDF_LDR_GLOBALS WdfLdrGlobals
BOOLEAN LibraryAcquireClientLock(_In_ PLIBRARY_MODULE LibModule)
NTSTATUS NTAPI ReferenceVersion(_In_ PWDF_BIND_INFO Info, _Out_ PLIBRARY_MODULE *Module)
Reference a WDF library version.
NTSTATUS ClassLinkInClient(_In_ PCLASS_MODULE ClassModule, _In_ PWDF_CLASS_BIND_INFO ClassBindInfo, _In_ PWDF_BIND_INFO BindInfo, _Out_ PCLASS_CLIENT_MODULE ClassClientModule)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING ValueName
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
_In_ PVOID _Out_opt_ PULONG_PTR _Outptr_opt_ PCUNICODE_STRING * ObjectName