64 DPRINT_ERROR((
"Invalid parameters: ServicePath=%p, OutLibraryModule=%p\n",
74 DPRINT_ERROR((
"Failed to allocate library module structure\n"));
101 LibraryInfo->Version.Major,
102 LibraryInfo->Version.Minor,
103 LibraryInfo->Version.Build));
111 DPRINT_ERROR((
"Failed to allocate service path buffer\n"));
123 DPRINT_ERROR((
"Failed to get image name from service path\n"));
137 DPRINT_VERBOSE((
"Successfully created library module %wZ (Image: %wZ, Base: %p, Size: 0x%x)\n",
216 if (pLibModule ==
NULL)
243 __DBGPRINT((
"ZwLoadDriver(%wZ) succeeded but Libray information was returned\n",
287 DPRINT_VERBOSE((
"Released reference to library %wZ, RefCount=%d\n",
312 cleanupNeeded =
TRUE;
354 __DBGPRINT((
"unload of %wZ returned 0x%x (this may not be a true error if someone else attempted to stop"
355 " the service first)\n",
385 if (ClientModule->ImageName.Buffer)
416 if (clientModule ==
NULL)
418 __DBGPRINT((
"ERROR: ExAllocatePoolWithTag failed\n"));
419 __DBGPRINT((
"ERROR: Client module NOT linked\n"));
443 __DBGPRINT((
"ERROR: Client module NOT linked\n"));
455 *OutClientModule = clientModule;
568 DbgPrint(
"WdfLdr: FindModuleByClientService - ");
#define InterlockedIncrement
#define InterlockedDecrement
#define _Requires_lock_held_(lock)
#define _Requires_exclusive_lock_held_(lock)
#define NT_SUCCESS(StatCode)
#define RemoveEntryList(Entry)
#define InsertHeadList(ListHead, Entry)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define IsListEmpty(ListHead)
NTSTATUS ExInitializeResourceLite(PULONG res)
#define KeInitializeEvent(pEvt, foo, foo2)
#define ExAcquireResourceExclusiveLite(res, wait)
#define ExDeleteResourceLite(res)
#define InitializeListHead(ListHead)
MxDeviceObject deviceObject
VOID GetNameFromPath(_In_ PCUNICODE_STRING Path, _Out_ PUNICODE_STRING Name)
_Must_inspect_result_ NTSTATUS GetImageName(_In_ PFX_DRIVER_GLOBALS DriverGlobals, _Out_ PUNICODE_STRING ImageName)
#define KeGetCurrentThread
#define KeLeaveCriticalRegion()
#define KeEnterCriticalRegion()
static VOID LibraryClientDereference(_In_ PLIBRARY_MODULE LibModule)
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.
NTSTATUS LibraryFindOrLoad(_In_ PCUNICODE_STRING ServicePath, _Out_ PLIBRARY_MODULE *LibModule)
VOID LibraryDereference(_In_ PLIBRARY_MODULE LibModule)
VOID LibraryReleaseClientLock(_In_ PLIBRARY_MODULE LibModule)
PLIBRARY_MODULE LibModule
PLIBRARY_MODULE foundModule
_In_ PCUNICODE_STRING ServicePath
VOID LibraryClose(_Inout_ PLIBRARY_MODULE LibModule)
Dereferences KMDF library's device object.
VOID NTAPI LibraryReleaseReference(_In_ PLIBRARY_MODULE LibModule)
Release a reference to a library module.
BOOLEAN LibraryUnlinkClient(_In_ PLIBRARY_MODULE LibModule, _In_ PWDF_BIND_INFO BindInfo)
static VOID ClientFree(_In_ PCLIENT_MODULE ClientModule)
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.
_In_ PCUNICODE_STRING _Out_ PLIBRARY_MODULE * OutLibraryModule
BOOLEAN LibraryAcquireClientLock(_In_ PLIBRARY_MODULE LibModule)
#define ExFreePoolWithTag(_P, _T)
FORCEINLINE PVOID ExAllocatePoolZero(ULONG PoolType, SIZE_T NumberOfBytes, ULONG Tag)
NTSYSAPI NTSTATUS NTAPI ZwUnloadDriver(_In_ PUNICODE_STRING DriverServiceName)
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
NTSTATUS NTAPI IoGetDeviceObjectPointer(IN PUNICODE_STRING ObjectName, IN ACCESS_MASK DesiredAccess, OUT PFILE_OBJECT *FileObject, OUT PDEVICE_OBJECT *DeviceObject)
#define STATUS_NOT_SAFE_MODE_DRIVER
VOID FxLdrAcquireLoadedModuleLock(VOID)
VOID FxLdrReleaseLoadedModuleLock(VOID)
NTSTATUS GetImageInfo(_In_ PCUNICODE_STRING ImageName, _Out_ PVOID *ImageBase, _Out_ PULONG ImageSize)
BOOLEAN ServiceCheckBootStart(_In_ PUNICODE_STRING Service)
PDRIVER_OBJECT LibraryDriverObject
UNICODE_STRING ServicePath
ERESOURCE ClientsListLock
PFILE_OBJECT LibraryFileObject
LIST_ENTRY LibraryListEntry
PWDF_LIBRARY_INFO LibraryInfo
LIST_ENTRY ClientsListHead
struct _LIST_ENTRY * Flink
ERESOURCE LoadedModulesListLock
LIST_ENTRY LoadedModulesList
PFNLIBRARYDECOMMISSION LibraryDecommission
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_INVALID_PARAMETER
#define STATUS_INSUFFICIENT_RESOURCES
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
WDF_LDR_GLOBALS WdfLdrGlobals
struct _CLIENT_MODULE CLIENT_MODULE
NTSTATUS LibraryCreate(_In_opt_ PWDF_LIBRARY_INFO LibraryInfo, _In_ PCUNICODE_STRING ServicePath, _Out_ PLIBRARY_MODULE *OutLibraryModule)
PLIBRARY_MODULE FindLibraryByServicePathLocked(_In_ PCUNICODE_STRING ServicePath)
#define DPRINT_ERROR(_x_)
NTSTATUS NTAPI FindModuleByClientService(_In_ PUNICODE_STRING RegistryPath, _Out_ PLIBRARY_MODULE *Library)
#define DPRINT_VERBOSE(_x_)
_In_ PVOID _Out_opt_ PULONG_PTR _Outptr_opt_ PCUNICODE_STRING * ObjectName
#define ObDereferenceObject