Мне нужно реализовать перекрестную проверку целостности файлов для моего университетского проекта. Для этого как мне перечислить файлы каталога в режиме ядра??
Относительный каталог ZwCreateFile
Ответы (1)
Отправной точкой будет ZwCreateFile
< /a> - который имеет такие параметры, как "FILE_LIST_DIRECTORY".
Затем вы будете использовать ZwQueryDirectoryFile
a>, чтобы получить информацию о файлах в этом каталоге.
Убедитесь УБЕДИТЕСЬ, что вы не забыли ZwClose
после того, как вы что-то открыли - это не так критично в пользовательском приложении, которое снова закрывается после того, как оно было использовано. Но ядро не знает, когда драйвер перестает использовать файл (или, если на то пошло, если какой-то другой драйвер получил этот дескриптор файла и будет использовать его в какой-то момент), поэтому, даже если ваш драйвер выгружен, файлы что он открыт, будет оставаться открытым до тех пор, пока система не перезапустится - я очень люблю «не перезапускать» свои системы, и с хорошим набором драйверов машина может работать более года. Если ваш драйвер пропускает хотя бы одну ручку в день, это 365 ручек.
Итак, код будет выглядеть примерно так:
HANDLE h;
NTSTATUS status;
OBJECT_ATTRIBUTES oa = { sizeof(OBJECT_ATTRIBUTES), NULL, L"mydir",
OPEN_CASE_INSENSITIVE, NULL, NULL };
IO_STATUS_BLOCK iosb = {};
status = ZwCreateFile(&h, FILE_LIST_DIRECTORY, &oa, &iosb, NULL,
FILE_ATTRIBUTE_NORMAL, FILE_OPEN, FILE_DIRECTORY_FILE,
NULL, 0);
if (status != STATUS_SUCCESS)
{
... do something...
return errorcode;
}
else
{
FILE_DIRECTORY_INFORMATION info;
for(;;)
{
status = ZwQueryDirectoryFile(h, NULL, NULL, &iosb, &info, sizeof(info),
FileDirectoryInformation, TRUE, L"*.*",
FALSE);
if (status != STATUS_SUCCESS)
{
... check error code and perhaps print if unexpected error ...
break;
}
... do soemthing with `info` ...
}
}
ZwClose(h);
Это просто "набросок". У меня нет установки, чтобы скомпилировать это прямо сейчас, и я мог пропустить что-то важное. Но это должно дать вам некоторое представление. Здесь МНОГО необязательных параметров и необязательных вариантов, и некоторые из них я «угадал», что вам нужно, но я думаю, что сделал разумный выбор. Могут отсутствовать детали, из-за которых это не работает, но в качестве грубой отправной точки это должно дать вам хотя бы представление.
FILE_BOTH_DIR_INFORMATION
и ZwQueryDirectoryFile
- person Ansh David; 20.06.2013