Так как встречаются вопросы на эту тему, а в поиске решения я не нашел, привожу примерный код.
NTSTATUS NTAPI BootPrint(IN PWSTR szMessage)
{
UNICODE_STRING us;
RtlInitUnicodeString(&us,szMessage);
return ZwDisplayString(&us);
}
ULONG Counter; //число циклов ожидания
LARGE_INTEGER WaitTimeout; //время одного ожидания
HANDLE hFile;
UNICODE_STRING us;
IO_STATUS_BLOCK iosb;
BOOLEAN bAborted = FALSE;
RtlInitUnicodeString(&us, L"\\Device\\KeyboardClass0");
OBJECT_ATTRIBUTES oa = {sizeof(OBJECT_ATTRIBUTES), NULL, &us, OBJ_CASE_INSENSITIVE};
BootPrint(L"Press any key to abort\n");
NTSTATUS ns = ZwCreateFile(&hFile, GENERIC_READ | SYNCHRONIZE | FILE_READ_ATTRIBUTES, &oa, &iosb, 0, 0x80, 0, 1, 1, 0, 0);
if (ns >= 0)
{
UCHAR buf[12];
LARGE_INTEGER f;
while ((Counter--) && (!bAborted))
{
ns = ZwReadFile(hFile, 0, 0, 0, &iosb, buf, 12, &f, 0);
if (ns != STATUS_PENDING)
bAborted = TRUE;
else
{
BootPrint(L".");
ns = ZwWaitForSingleObject(hFile, FALSE, &WaitTimeout);
if (ns != STATUS_TIMEOUT)
bAborted = TRUE;
}
}
ZwClose(hFile);
}
if (bAborted)
BootPrint(L"Aborted\n");
При выполнении этого кода при значениях Counter=5 и WaitTimeout.QuadPart=-10000000 будет происходить следующее: на экран будет выведена надпись "Press any key to abort", после чего каждую секунду будет появляться по одной точке, либо пока не будет нажата какая-либо клавиша на клавиатуре (и на экране отобразится строка "Aborted"), либо пока не истечет лимит на 5 таких точек и программа продолжит работу без вывода сообщения.
Кстати, а чей это сайт?
http://zw.nightmail.ru/_bootexe.htm Код, как я понял, именно оттуда.
Я так и не нашел на страничках упоминания об авторе, а интересно.
Здравствуйте, Andrew S, Вы писали:
AS>Кстати, а чей это сайт? http://zw.nightmail.ru/_bootexe.htm Код, как я понял, именно оттуда.
AS>Я так и не нашел на страничках упоминания об авторе, а интересно.
Я это, мыло там есть мое, мог бы и по нему написать и проверить. Считаешь, стоит туда свое имя написать?
Считаю, что стОит. На заглавной страничке. Или сделать что-то типа ссылки "О себе".
V>Я это, мыло там есть мое, мог бы и по нему написать и проверить. Считаешь, стоит туда свое имя написать?
А, нашел. Тоже, выбрал место куда запихнуть — в
Описание функций, типов и констант