Доброго времени суток, может быть у кого-то завалялся кусок кода, который по открытому хэндлу файла вернет полный путь к файлу. Или же направьте в нужное русло
поиск по хелпу Windows Driver Kit говорит, что ZwQueryInformationFile с параметром FileNameInformation
Может знает в чем может быть причина BSOD? (пробный вариант, поэтому пока не проверяю код возврата) Вот сама функция, с помощью которой я получаю путь: Вот тут вызов:
Исправил ошибку, но остался один косяк. Иногда выводятся левые символы. В чем может быть проблема? Выделяю память перед вызовом функции получения пути следующим образом: PWCHAR filePath = (PWCHAR)ExAllocatePool(NonPagedPool, sizeof(WCHAR) + MAX_PATH * 2); Получаю путь следующим образом: NTSTATUS GetPathByHandle(HANDLE FileHandle, PWCHAR FileName) ....... status = ZwQueryInformationFile(FileHandle, pIoStatus, pInfo, sizeof(FILE_NAME_INFORMATION) + MAX_PATH, FileNameInformation); if (!NT_SUCCESS(status)) { ExFreePool(pIoStatus); ExFreePool(pInfo); KdPrint(("Error execution ZwQueryInformationFile. STATUS=%x", status)); return status; } wcscpy(FileName, pInfo->FileName); //пробовал выводить отдельно pInfo->FileName, проблема такая же, лишние символы
Может потому, что длина полученного имени возвращена явно в pInfo->FileNameLength , и никто не обещал , что будут нули после имени ?
njeen, пробовал таким образом, но результат тот же. Или надо терминирующий ноль руками дописывать?: wcscat_s(FileName, driveDosName->Length, driveDosName->Buffer); wcscat_s(FileName, pInfo->FileNameLength, pInfo->FileName);
да, но зачем? Проще из этого UNICODE_STRING сделать, и делать дальше что нужно - хоть через KdPrint выводить
guessWh0_o, память, которую выделяет ExAllocatePool, не инициализирована. Поэтому, чтобы там не было мусора, вам нужно перед использованием этой памяти, обнулить её.