内核模式下的GlobalLock和全局内存?

时间:2011-09-15 23:31:53

标签: memory kernel driver

如何在内核模式下使用globallock?

与kernel32.lib链接的驱动程序总是给我系统错误127.(环境正确)

我怎么可以使用它,或者有什么工作在内核模式?

2 个答案:

答案 0 :(得分:1)

全局/本地内存在内核模式下没有任何意义。

您可能希望使用ExAllocatePoolWithTag进行内核内存分配。

答案 1 :(得分:0)

在内核模式下将HGLOBAL句柄转换为指针的方法是位于Shadow SSDT中的NtUserCreateLocalMemHandle。 从reactor读取代码后,可以这样做。

 HANDLE hRetVal;
    PVOID mem = NULL;
    NTSTATUS status;
    PDWORD size = NULL;
    DWORD dwordsize = 4;
    DWORD realsize = 0;
    KAPC_STATE apcstate;

    ZwAllocateVirtualMemory(NtCurrentProcess(), &size, 0, &dwordsize, MEM_COMMIT, PAGE_READWRITE)
    KeStackAttachProcess(PsGetCurrentProcess(),&apcstate)
    hRetVal = NtUserGetClipboardData(uFormat, pParam);//I am calling it in my hook
    status = NtUserCreateLocalMemHandle(hRetVal, NULL, 0, size);
    realsize = *size;
    if(status == STATUS_BUFFER_TOO_SMALL)
    {
      ZwAllocateVirtualMemory(NtCurrentProcess(),&mem,0,size,MEM_COMMIT,PAGE_READWRITE);
      status = NtUserCreateLocalMemHandle(hRetVal, mem, realsize, NULL);
      ZwFreeVirtualMemory(NtCurrentProcess(),&mem,size,MEM_DECOMMIT)
    }
   if(mem != NULL)
   {
      ZwFreeVirtualMemory(NtCurrentProcess(),&size,&dwordsize,MEM_DECOMMIT);
   }
   KeUnstackDetachProcess(&apcstate);

......免费记忆和别的东西。