Суть: Использую ZwQuerySystemInformation для получения списка загруженных модулей. Примерно так: Код (Text): ns = ZwQuerySystemInformation(SystemModuleInformation, &p, 0, &cb); if (!cb) return 0; p = ExAllocatePool(PagedPool, cb); if (!p) return 0; ns = ZwQuerySystemInformation(SystemModuleInformation, p, cb, &cb); И получаю в p->Modules[0].ImageName адрес вида: "\WINDOWS\System32\ntoskrnl.exe". Теперь вопрос. А как получить ПОЛНЫЙ адрес (с буквой диска)? Предложения "тупо дописать спереди "С:"" - сразу фтопку. Мне интересно каким образом надо действовать "правильно", чтобы получить рабочий результат даже на тех машинах, где система установлена не на С:.
я юзаю такой кривой код Для NtCreateFile нормально работает. Код (Text): WCHAR pszSysRoot[] = L"\\WINDOWS\\"; #define SYSROOT_SIZE 18 WCHAR pszTmpDrvName[260] = L"\\SystemRoot\\System32\\drivers\\"; #define TMPNAME_END 29 WCHAR pszTmpDrvName2[260] = L"\\SystemRoot\\"; #define TMPNAME2_END 12 PWSTR GetPEPath(PUNICODE_STRING pusBasePath){ PWSTR ret = pusBasePath->Buffer; if (ret[0] != '\\'){ memcpy(&pszTmpDrvName[TMPNAME_END], ret, pusBasePath->MaximumLength * 2); ret = pszTmpDrvName; } else if (!memcmp(ret, pszSysRoot, SYSROOT_SIZE)){ memcpy(&pszTmpDrvName2[TMPNAME2_END], &ret[SYSROOT_SIZE / 2], pusBasePath->MaximumLength * 2 - SYSROOT_SIZE); ret = pszTmpDrvName2; } return ret; } Если хочешь чтобы SystemRoot преобразовалось в нормальный путь, то SharedUserData->NtSystemRoot будет тебе полезно.