ULONG GetPid()
{
NTSTATUS ntStatus;
char ProcessName[256];
ULONG cbBuffer;
PSYSTEM_PROCESS_INFORMATION pInfo;
PSYSTEM_THREAD_INFORMATION pThread;
VOID* pBuffer = NULL;
ULONG i;
ULONG ThreadCount;
char MyProtectName[]=
"calc.exe"
;
ULONG MyProcessId;
ZwQuerySystemInformation(5, &cbBuffer, 0, &cbBuffer);
pBuffer = ExAllocatePool (NonPagedPool, cbBuffer);
if
(pBuffer == NULL)
{
return
1;
}
ntStatus = ZwQuerySystemInformation(5, pBuffer, cbBuffer, NULL);
if
(!NT_SUCCESS(ntStatus))
{
ExFreePool(pBuffer);
return
1;
}
pInfo = (PSYSTEM_PROCESS_INFORMATION)pBuffer;
while
(1){
LPWSTR pszProcessName = pInfo->ProcessName.Buffer;
if
(pszProcessName == NULL)
pszProcessName = L
"NULL"
;
wcstombs(ProcessName,pszProcessName,256);
if
(_stricmp(MyProtectName,ProcessName)==0)
{
DbgPrint(
"calc.exe Pid is %d\n"
,pInfo->ProcessId);
MyProcessId=pInfo->ProcessId;
return
MyProcessId;
}
if
(pInfo->NextEntryDelta == 0)
break
;
pInfo = (PSYSTEM_PROCESS_INFORMATION)(((PUCHAR)pInfo)+ pInfo->NextEntryDelta);
}
ExFreePool(pBuffer);
return
0;
}