GLONG)pCurrentModule->DllBase;
}
}
pCurrentListEntry = pCurrentListEntry->Flink;
}
return 0;
}
上这段代码的使用也非常简单,通过传入一个UNICODE_STRING
类型的模块名,即可获取到模块基址并返回,至于如何初始化UNICODE_STRING
则在《驱动开发:内核字符串转换方法》
中有详细的介绍,此处你只需要这样来写。
NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath)
{
DbgPrint("hello lyshark \n");
UNICODE_STRING unicode;
// 获取WinDDK驱动基地址
RtlUnicodeStringInit(&unicode, L"WinDDK.sys");
LONGLONG winddk_address = GetModuleBaseByName(Driver, unicode);
DbgPrint("WinDDK模块基址 = %p \n", winddk_address);
// 获取ACPI驱动基地址
RtlUnicodeStringInit(&unicode, L"ACPI.sys");
LONGLONG acpi_address = GetModuleBaseByName(Driver, unicode);
DbgPrint("ACPI模块基址 = %p \n", acpi_address);
Driver->DriverUnload = UnDriver;
return STATUS_SUCCESS;
}
运行这段驱动程序,即可分别输出WinDDK.sys
以及ACPI.sys
两个驱动模块的基地址;