diff --git a/2.x/trunk/KProcessHacker/auto.cmd b/2.x/trunk/KProcessHacker/auto.cmd index 8c6a55733..436e21fb1 100644 --- a/2.x/trunk/KProcessHacker/auto.cmd +++ b/2.x/trunk/KProcessHacker/auto.cmd @@ -1,6 +1,6 @@ @echo off -build -cZ +build -cZ dirty if not %errorlevel%==0 goto end copy bin\i386\kprocesshacker.sys ..\bin\Release32\ copy bin\i386\kprocesshacker.pdb ..\bin\Release32\ diff --git a/2.x/trunk/KProcessHacker/bin/amd64/kprocesshacker.sys b/2.x/trunk/KProcessHacker/bin/amd64/kprocesshacker.sys index 71c5fa492..2ed125aa5 100644 Binary files a/2.x/trunk/KProcessHacker/bin/amd64/kprocesshacker.sys and b/2.x/trunk/KProcessHacker/bin/amd64/kprocesshacker.sys differ diff --git a/2.x/trunk/KProcessHacker/bin/i386/kprocesshacker.sys b/2.x/trunk/KProcessHacker/bin/i386/kprocesshacker.sys index 556394bf8..6affb212d 100644 Binary files a/2.x/trunk/KProcessHacker/bin/i386/kprocesshacker.sys and b/2.x/trunk/KProcessHacker/bin/i386/kprocesshacker.sys differ diff --git a/2.x/trunk/KProcessHacker/dynimp.c b/2.x/trunk/KProcessHacker/dynimp.c index 4daaffe93..8d18f394c 100644 --- a/2.x/trunk/KProcessHacker/dynimp.c +++ b/2.x/trunk/KProcessHacker/dynimp.c @@ -42,6 +42,11 @@ VOID KphDynamicImport( PsIsProtectedProcess_I = KphGetSystemRoutineAddress(L"PsIsProtectedProcess"); PsResumeProcess_I = KphGetSystemRoutineAddress(L"PsResumeProcess"); PsSuspendProcess_I = KphGetSystemRoutineAddress(L"PsSuspendProcess"); + + dprintf("ObGetObjectType: 0x%Ix\n", ObGetObjectType_I); + dprintf("PsIsProtectedProcess: 0x%Ix\n", PsIsProtectedProcess_I); + dprintf("PsResumeProcess: 0x%Ix\n", PsResumeProcess_I); + dprintf("PsSuspendProcess: 0x%Ix\n", PsSuspendProcess_I); } /** diff --git a/2.x/trunk/KProcessHacker/object.c b/2.x/trunk/KProcessHacker/object.c index 55386f939..183147eae 100644 --- a/2.x/trunk/KProcessHacker/object.c +++ b/2.x/trunk/KProcessHacker/object.c @@ -1021,9 +1021,21 @@ NTSTATUS KpiSetInformationObject( if (AccessMode != KernelMode) { + ULONG alignment; + + switch (ObjectInformationClass) + { + case KphObjectHandleFlagInformation: + alignment = sizeof(BOOLEAN); + break; + default: + alignment = sizeof(ULONG); + break; + } + __try { - ProbeForRead(ObjectInformation, ObjectInformationLength, sizeof(ULONG)); + ProbeForRead(ObjectInformation, ObjectInformationLength, alignment); } __except (EXCEPTION_EXECUTE_HANDLER) { diff --git a/2.x/trunk/KProcessHacker/process.c b/2.x/trunk/KProcessHacker/process.c index 4f1540ac5..1de7bcecd 100644 --- a/2.x/trunk/KProcessHacker/process.c +++ b/2.x/trunk/KProcessHacker/process.c @@ -515,9 +515,21 @@ NTSTATUS KpiQueryInformationProcess( if (AccessMode != KernelMode) { + ULONG alignment; + + switch (ProcessInformationClass) + { + case KphProcessProtectionInformation: + alignment = sizeof(KPH_PROCESS_PROTECTION_INFORMATION); + break; + default: + alignment = sizeof(ULONG); + break; + } + __try { - ProbeForWrite(ProcessInformation, ProcessInformationLength, sizeof(ULONG)); + ProbeForWrite(ProcessInformation, ProcessInformationLength, alignment); if (ReturnLength) ProbeForWrite(ReturnLength, sizeof(ULONG), sizeof(ULONG)); @@ -561,21 +573,24 @@ NTSTATUS KpiQueryInformationProcess( status = STATUS_NOT_SUPPORTED; } - if (ProcessInformationLength == sizeof(KPH_PROCESS_PROTECTION_INFORMATION)) + if (NT_SUCCESS(status)) { - __try + if (ProcessInformationLength == sizeof(KPH_PROCESS_PROTECTION_INFORMATION)) { - ((PKPH_PROCESS_PROTECTION_INFORMATION)ProcessInformation)->IsProtectedProcess = protectedProcess; + __try + { + ((PKPH_PROCESS_PROTECTION_INFORMATION)ProcessInformation)->IsProtectedProcess = protectedProcess; + } + __except (EXCEPTION_EXECUTE_HANDLER) + { + status = GetExceptionCode(); + } } - __except (EXCEPTION_EXECUTE_HANDLER) + else { - status = GetExceptionCode(); + status = STATUS_INFO_LENGTH_MISMATCH; } } - else - { - status = STATUS_INFO_LENGTH_MISMATCH; - } returnLength = sizeof(KPH_PROCESS_PROTECTION_INFORMATION); } @@ -679,9 +694,21 @@ NTSTATUS KpiSetInformationProcess( if (AccessMode != KernelMode) { + ULONG alignment; + + switch (ProcessInformationClass) + { + case KphProcessProtectionInformation: + alignment = sizeof(KPH_PROCESS_PROTECTION_INFORMATION); + break; + default: + alignment = sizeof(ULONG); + break; + } + __try { - ProbeForRead(ProcessInformation, ProcessInformationLength, sizeof(ULONG)); + ProbeForRead(ProcessInformation, ProcessInformationLength, alignment); } __except (EXCEPTION_EXECUTE_HANDLER) {