Как получить текущий рабочий каталог из windows кода драйвера режима ядра? - PullRequest
1 голос
/ 31 января 2020

Я пишу Windows драйвер режима ядра , который использует API

PsSetCreateProcessNotifyRoutineEx

В его функции обратного вызова мне нужно получить текущий рабочий каталог процесса. Как это можно сделать? Любые идеи, выводы будут очень полезны.

Заранее спасибо.

1 Ответ

1 голос
/ 10 февраля 2020

Следующий код решил проблему

KAPC_STATE ka_state;
WCHAR   CWDBuffer[MAX_PATH] = { 0 };
USHORT  CWDBytes = 0;

UNICODE_STRING GetProcessPeb = RTL_CONSTANT_STRING(L"PsGetProcessPeb");
PsGetPeb = (PsGetProcessPeb)MmGetSystemRoutineAddress(&GetProcessPeb);
if (PsGetPeb)
{
    Peb = PsGetPeb(Process); // Process is handle to current process
    if (Peb) {
        KeStackAttachProcess(Process, &ka_state);

        if (Peb->ProcessParameters->CurrentDirectory.DosPath.Length < (MAX_PATH * sizeof(WCHAR)))
        {
            CWDBytes = Peb->ProcessParameters->CurrentDirectory.DosPath.Length;
        }
        else
        {
            CWDBytes = MAX_PATH * sizeof(WCHAR);
        }

        memcpy(CWDBuffer, Peb->ProcessParameters->CurrentDirectory.DosPath.Buffer, CWDBytes);

        KeUnstackDetachProcess(&ka_state);
    }
    else {
        DbgPrintEx(
            DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL,
            "Unable to get PEB\n"
        );
    }
}
...