- 你好!
我打赌一个多星期,我无法完整地了解如何获取内核对象列表。我的算法如下:
- 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吗?感谢您的帮助