- こんにちは!
1 週間以上かかると思いますが、カーネル オブジェクトのリストを取得する方法の全体像を把握することはできません。私のアルゴリズムは次のとおりです。
- 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 を使用しないことは可能ですか? ご協力ありがとうございました