gpt4 book ai didi

c++ - 设备驱动程序库

转载 作者:行者123 更新时间:2023-11-28 07:09:25 28 4
gpt4 key购买 nike

我制作了一个库,用于将任何 PE 格式文件映射到内存地址,问题是我只在用户区使用 Visual Studio 2013 和标准 .lib 格式。这是否意味着我的库不能在设备驱动程序中使用?

例如我有以下片段:

    HMODULE ntdllmod = LoadLibraryA("ntdll.dll");
if (ntdllmod)
{
ZwQueryInformationProcess func = (ZwQueryInformationProcess)GetProcAddress(ntdllmod, "ZwQueryInformationProcess");
}

这在用户端运行良好,但在内核上我不需要调用 GetProcAddress,我可以直接调用 ZwQueryInformationProcess,因为它是一个 ntoskrnl 导出...我不能只做这个吗?:

#IF USER_LAND
HMODULE ntdllmod = LoadLibraryA("ntdll.dll");
if (ntdllmod)
{
ZwQueryInformationProcess func = (ZwQueryInformationProcess)GetProcAddress(ntdllmod, "ZwQueryInformationProcess");
}
#elif KERNEL_MODE
//Run my Kernel version code here.

如果这不可能,那么我如何在 VS2013 中构 build 备驱动程序库? (找不到选项)此外,任何了解如何链接驱动程序库的指南或引用资料都会有所帮助,假设它与普通库不同。

编辑:我已经知道使用 ZwQueryInformationProcess,问题是我是否可以使用预处理器指令 #IF 生成驱动程序库或用户模式库,并在同一解决方案中同时实现这两种实现。

谢谢。

最佳答案

我只会解释 ZwQueryInformationProcess 函数的情况。ZwQueryInformationProcess 已经由 ntoskrnl.exe 导出,然后就可以轻松使用了。

  1. 包含头文件。

例如)#include "ntddk.h"

  1. 或声明 ZwQueryInformationProcess例如)

NTSYSAPI NTSTATUS NTAPI ZwQueryInformationProcess( 在处理过程句柄中, 在 ULONG ProcessInformationClass 中, OUT PVOID ProcessInformation, 在 ULONG ProcessInformationLength 中, OUT PULONG ReturnLength OPTIONAL);

  1. 在源文件中添加 ntoskrnl.lib。

  2. 终于可以使用了。就是这样。

例)

ULONG GetProcessID(HANDLE ProcessHandle, PPEB* ppPeb )
{
NTSTATUS Status;
PROCESS_BASIC_INFORMATION ProcInfo;

Status = ZwQueryInformationProcess(ProcessHandle, ProcessBasicInformation, &ProcInfo, sizeof(ProcInfo), NULL);
if (STATUS_SUCCESS == ntStatus) {
if (ppPeb) {
*ppPeb = ProcInfo.PebBaseAddress;
}
return ProcInfo.UniqueProcessId;
}
return 0;
}

关于c++ - 设备驱动程序库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21250787/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com