Имею код примерно следующего содержания : Код (Text): NTSTATUS status; UNICODE_STRING DISK; HANDLE fileHandle; IO_STATUS_BLOCK iostatus; OBJECT_ATTRIBUTES oa; char Buff [3584]; LARGE_INTEGER l_integr; l_integr.QuadPart = 0; RtlZeroMemory(&Buff,sizeof(Buff)); RtlInitUnicodeString(&DISK,L"\\??\\PHYSICALDRIVE1"); InitializeObjectAttributes(&oa, &DISK, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL); status=ZwCreateFile(&fileHandle, GENERIC_READ|GENERIC_WRITE | SYNCHRONIZE, &oa,&iostatus, 0, 0, 0,FILE_OPEN, FILE_NO_INTERMEDIATE_BUFFERING|FILE_SYNCHRONOUS_IO_NONALERT,0,0 ); if(status != STATUS_SUCCESS) { DebugPrint(("Failed to create disk!\n")); return status; } do { status = ZwWriteFile(fileHandle,0, NULL, NULL,&iostatus,(PVOID)Buff,sizeof(Buff),&l_integr, NULL); DebugPrint("\n Write to disk =%X",l_integr.QuadPart); l_integr.QuadPart = l_integr.QuadPart + (__int64)iostatus.Information; }while(!status); В выше указанном коде столкнулся со следующей проблемой при укании размера Buff больше чем 3968 хотя бы на 1, WDK 7600.16385.1 начинаеть ругаться ,так вот у меня вопрос счем это связанно, и можноли этот барьер преодолеть.
Ты в курсе, что стека в ядре всего 12 КБ? А ты ажно ~4 КБ оттяпал. Если хотя бы 3 драйвера так тяпнут, то кирдык системе незамедлительно. Я советую буфера >1 КБ выделять из пула. Как именно? Возможно, компилятор обнаружил, что именно в этом месте столько стека использовать нельзя.
x64 я впринципе еще не очень силен в написании драйверов )). А ответ компилятора таков: "error LNK2019: unresolved external symbol _chkstk referenced in function _DriverEntry@8".
Ну, совет выше я уже дал. Учись. Ну да, всё правильно, если стека используешь больше, чем 1 страница (т.е. 4096 байт на x86 и 8192 байта на x64), то получишь такое.