Справочник относительно ZwCreateFile

Я должен реализовать проверку целостности файлов для моего университетского проекта. Для этого, как мне перечислить файлы каталога в режиме ядра?

2

Решение

Ваша отправная точка будет ZwCreateFile — который имеет параметры, такие как «FILE_LIST_DIRECTORY».

Затем вы будете использовать ZwQueryDirectoryFile чтобы получить информацию о файлах в этом каталоге.

Делать КОНЕЧНО что вы не забыли 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);

Это всего лишь «грубый набросок». У меня нет установки для компиляции этого прямо сейчас, и я, возможно, пропустил что-то важное. Но это должно дать вам некоторое представление. Здесь есть МНОЖЕСТВО необязательных параметров и необязательных параметров, и некоторые из них я «угадал», что вы хотите, но я думаю, что сделал разумный выбор. Могут отсутствовать детали, из-за которых это не сработает, но, как грубая отправная точка, это должно дать вам хотя бы представление.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]