Здравствуйте. Хочу узнать можно-ли в драйверах получить какими-нибудь функциями например путь нахождения драйвера или путь к папке system32 ?
Код (Text): NTSTATUS GetSystemRoot(){ UNICODE_STRING usRealDrvName; WCHAR LinkName[7] = L"\\??\\X:"; NTSTATUS ns; usSysDir.Buffer = wsSysDir; usSysDir.Length = 0; usSysDir.MaximumLength = 260 * sizeof(WCHAR); LinkName[4] = SharedUserData->NtSystemRoot[0]; ns = QuerySymbolicLink(LinkName, &usRealDrvName); if (ns != STATUS_SUCCESS) return ns; RtlAppendUnicodeStringToString(&usSysDir, &usRealDrvName); RtlAppendUnicodeToString(&usSysDir, &(SharedUserData->NtSystemRoot[2])); RtlAppendUnicodeToString(&usSysDir, L"\\System32"); ExFreePool(usRealDrvName.Buffer); return STATUS_SUCCESS; }
забыл Код (Text): NTSTATUS QuerySymbolicLink(PWSTR DriveName, PUNICODE_STRING LinkTarget){ UNICODE_STRING usLinkName; OBJECT_ATTRIBUTES oaLinkName; NTSTATUS ns; HANDLE hLink; RtlInitUnicodeString(&usLinkName, DriveName); InitializeObjectAttributes(&oaLinkName, &usLinkName, OBJ_CASE_INSENSITIVE, 0, 0); ns = ZwOpenSymbolicLinkObject(&hLink, GENERIC_READ, &oaLinkName); if (ns != STATUS_SUCCESS) return ns; LinkTarget->MaximumLength = 260 * sizeof(WCHAR); LinkTarget->Length = 0; LinkTarget->Buffer = ExAllocatePool(PagedPool, LinkTarget->MaximumLength); if (!LinkTarget->Buffer){ ZwClose(hLink); return STATUS_INSUFFICIENT_RESOURCES; } ns = ZwQuerySymbolicLinkObject(hLink, LinkTarget, NULL); ZwClose(hLink); if (ns != STATUS_SUCCESS) ExFreePool(LinkTarget->Buffer); return ns; }
как в юзермоде получить нормальный путь из такой от фигни \??\с:\... и %SystemRoot%\... ? Есть ведь какая-то функция которая это дело (эти символьные ссылки) к нормальному виду приводит а также короткие имена в длинные преобразовывает - подскажите плиз - я видел вроде что то подобное но сейчс найти не могу
SadKo это не серъезно, должен быть какой-то другой подход n0name это я знаю но все она не раскроет \??\ подскажите плиз кто сталкивался