【发布时间】:2014-07-10 09:58:03
【问题描述】:
- 嗨!
我打赌一个多星期,我无法完整地了解如何获取内核对象列表。我的算法如下:
- 1) 连接 NTDLL.dll (LoadLibrary)
- 2) GetProcAddress (variable_Library_name, "NtQueryDirectoryObject") 和预告结构:_OBJDIR_INFORMATION, _OBJECT_ATTRIBUTES
- 3) 尝试将函数 NtOpenDirectoryObject 应用于以下列表 对象
这里有一段代码负责使用函数NtOpenDirectoryObject:
OBJDIR_INFORMATION *ssinfo =(OBJDIR_INFORMATION* ) HeapAlloc(GetProcessHeap(), 0, 0x800);
///////////////////////
HANDLE hFile,hThread,hMapFile;
HMODULE hNtdll ,hKernel;
DWORD dwThreadId;
OBJECT_ATTRIBUTES obj;
WCHAR * uString=L"\\BaseNamedObjects";
UNICODE_STRING str;
DWORD i,a,iStrLen,b=0;
char sObjName[30],sTmp[50];
LPVOID lpMapAddress;
FARPROC pWinExec,pExitThread;
bool bFound;
char* sCommand;
/////////////////////////////////////////////////////////////////
NtQueryDirectoryObject = (NTQUERYDIRECTORYOBJECT )GetProcAddress(hinstLib,"NtQueryDirectoryObject");
InitializeObjectAttributes (&obj, &str, 0, 0, 00);
NtOpenDirectoryObject(&hFile,0x20001,&obj);
完整代码(包括结构定义)位于:http://pastebin.com/pDNb3GTn
调用带参数NtOpenDirectoryObject的函数时得到异常c0000005,表示访问被阻塞。
请告诉我,我做错了什么,我的错误在哪里。可以不使用本机api吗?谢谢你的帮助
【问题讨论】:
-
首先,您在
WCHAR* uString中输入的名称永远不会连接到UNICODE_STRING str,因此您传递给NtOpenDirectoryObject的OBJECT_ATTRIBUTES对象中没有名称。