Показать сообщение отдельно

  #27  
Старый 27.02.2009, 15:38
0x0c0de
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
С нами: 9981026

Репутация: 1564
По умолчанию

Я хз как вы там писали

Код:
// toolhelp.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include <Tlhelp32.h>
#include <ntdll.h>

#pragma comment (lib,"ntdll.lib");

VOID SetNeededPrivelege(VOID)
{
	HANDLE hndl;
     
	TOKEN_PRIVILEGES newpriv,prevpriv;

	DWORD retl;

	if(OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hndl))
	{
	
		if (LookupPrivilegeValue(0, L"SeDebugPrivilege", &newpriv.Privileges[0].Luid))
		{

			newpriv.PrivilegeCount = 1; 

			newpriv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 

			AdjustTokenPrivileges(hndl, 0, &newpriv, sizeof(newpriv), &prevpriv, &retl); 
		} 
      
		CloseHandle(hndl); 
	}
}


int _tmain(int argc, _TCHAR* argv[])
{
	HANDLE hSnap,hFile,hMSnp;
	PROCESSENTRY32 proc32;
	MODULEENTRY32 moduleentry32;
	NTSTATUS status;
	OBJECT_ATTRIBUTES ObjAttr;
	UNICODE_STRING usExeModName;
	IO_STATUS_BLOCK ioStatus;
	WCHAR wcPath[500];
	
	SetNeededPrivelege();

	hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

	 
	if( hSnap != INVALID_HANDLE_VALUE )
  
	{
    
		proc32.dwSize = sizeof(PROCESSENTRY32);
	 
		if( Process32First( hSnap, &proc32 ) )
  
		{
    
			do
			{
				hMSnp = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE,proc32.th32ProcessID); 

				if(hMSnp!=INVALID_HANDLE_VALUE)
				{

					 moduleentry32.dwSize = sizeof( MODULEENTRY32 ); 

					 if(Module32First(hMSnp, &moduleentry32))
					 {
						 do{
							 if(lstrcmp(moduleentry32.szModule,proc32.szExeFile)==0)
							 {
								 
								  memset(wcPath,0,500*2);

								 if(!((_wcsnicmp(moduleentry32.szExePath,
									 L"\\??\\",
									 lstrlen(L"\\??\\")) == 0)||
								 (_wcsnicmp(moduleentry32.szExePath,
									 L"\\SystemRoot\\",
									 lstrlen(L"\\SystemRoot\\")) == 0)
									 ))	
								 {	
									 lstrcpy(wcPath,L"\\??\\");
									 lstrcat(wcPath,moduleentry32.szExePath);

								 }else
								 {

									 lstrcpy(wcPath,moduleentry32.szExePath);

								 }
								 RtlInitUnicodeString(&usExeModName,wcPath);

									
								 InitializeObjectAttributes(&ObjAttr, 
										&usExeModName, 
										OBJ_CASE_INSENSITIVE, 
										NULL, NULL); 
    

								 status = NtCreateFile(&hFile,
														FILE_READ_DATA,
														&ObjAttr,
														&ioStatus,
														0,  
														FILE_ATTRIBUTE_NORMAL,
														FILE_SHARE_WRITE|FILE_SHARE_READ,
														FILE_OPEN,
														FILE_NON_DIRECTORY_FILE,
														NULL,
														0);

									
								 if (NT_SUCCESS(status))
									{
						
										
										wprintf(L"File %ws opened successfully\n",
																			wcPath);
										wprintf(L" file size = %d bytes\n",GetFileSize(hFile,0));
																
										NtClose(hFile);
									
								 }else 
								 {

									 
									 wprintf(L"Cannot open file %ws status = %X\n",
																		wcPath,
																		status);
								 }

								}

							}while( Module32Next(hMSnp, &moduleentry32));

					 }

				}



			}while(Process32Next(hSnap, &proc32));
  
		}	
  
	}

	Sleep(-1);
	
	return 0;
}
Проверка конечно довольно ненадежная [если нет \SystemRoot\ или \??\ вначале добавляем \??\], но если вам надо разберетесь и доделаете

Последний раз редактировалось 0x0c0de; 27.02.2009 в 15:54..
 
Ответить с цитированием