获取内核对象列表窗口

时间:2014-05-21 16:12:26

标签: c windows winapi ntdll

  • HI <!/ LI>

我赌了一个多星期,我无法形成如何获得内核对象列表的完整图片。我的算法如下:

  • 1)连接NTDLL.dll(LoadLibrary)
  • 2)GetProcAddress(variable_Library_name,&#34; NtQueryDirectoryObject&#34;) 和预先公告结构:_OBJDIR_INFORMATION, _OBJECT_ATTRIBUTES
  • 3)尝试将函数NtOpenDirectoryObject应用于列表 对象

这是一段负责使用NtOpenDirectoryObject函数的代码: http://pastebin.com/pDNb3GTn

使用参数NtOpenDirectoryObject调用函数时会获得异常c0000005,这意味着访问被阻止。

请告诉我,我做错了,我的错误在哪里。是否可以不使用原生api?谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

异常c0000005是访问冲突。这并不意味着访问被阻止。这意味着访问了无效的内存,例如,如果访问了NULL /未初始化的指针,或者您没有正确对齐数据并访问超出已分配范围的内容。

正如Andrew所说,你根本没有初始化UNICODE_STRING。试试这个:

hNtdll = LoadLibrary("ntdll.dll");
NtOpenDirectoryObject = (NTOPENDIRECTORYOBJECT) GetProcAddress(hNtdll, "NtOpenDirectoryObject");
...
if (NtOpenDirectoryObject)
{ 
    // add these three lines
    str.Length = lstrlenW(uString) * sizeof(WCHAR);  
    str.MaximumLength = str.Length; 
    str.Buffer = uString;

    InitializeObjectAttributes (&obj, &str, 0, NULL, NULL);
    NtOpenDirectoryObject(&hFile, 0x20001, &obj);
}