Тут такая проблема. Я определяю имя текущего процесса
NTSTATUS NTAPI GetProcessName (PCHAR Buffer, ULONG SizeBuffer){
PROCESS_BASIC_INFORMATION ProcInfo;
ULONG Size;
PPEB pPeb;
PPROCESS_PARAMETERS pProcParam;
if (Buffer == NULL) return STATUS_ERROR;
memset (Buffer, 0, SizeBuffer);
strcpy (Buffer, "???");
if ( ZwQueryInformationProcess (NtCurrentProcess(), ProcessBasicInformation, &ProcInfo,
sizeof(PROCESS_BASIC_INFORMATION), &Size) == STATUS_SUCCESS){
if ((pPeb = (PEB *)ProcInfo.PebBaseAddress) != NULL){
pProcParam = pPeb->ProcessParameters;
if (pProcParam){
memset(Buffer, 0, SizeBuffer);
sprintf (Buffer, "%S", pProcParam->ApplicationName.Buffer);
return STATUS_SUCCESS;
}
}
}
return STATUS_ERROR;
}
Имя помещается в буфер. SoftIce показывает, что он заполняется и заполняется правильно.
Но когда я его пытаюсь вывести в файл, то выводится "
"
В чем может быть проблемма ?
З.Ы. Посоветовали использовать не ZwQueryInformationProcess, а
PEPROCESS PsGetCurrentProcess( );
Но почему-то из _EPROCESS не получается получить указатель на Peb, хотя описание _EPROCESS
typedef struct _EPROCESS{
...
struct _PEB *Peb;
...
}
Компилятор ругается
error C2037: left of 'Peb' specifies undefined struct/union '_EPROCESS'
Может у кого есть описание EPROCESS (и вообще структур) для WinXP
Спасибо