V-ctor
Гость
|
|
« : 16-12-2003 14:43 » |
|
Как-то странно в первом случае все нормально чтется, а во втором выдает ошибку я пользовался в нумеге так:
KMemory Mem(I.Mdl()); PUCHAR pBuffer = (PUCHAR) Mem.MapToSystemSpace();
где MapToSystemSpace() это
CSHORT canFail; // original fail flag in MDL
if(!(pMdl->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | MDL_SOURCE_IS_NONPAGED_POOL))) {
// get the current fail flag canFail = (CSHORT)(pMdl->MdlFlags & MDL_MAPPING_CAN_FAIL);
// set 'mapping can fail' so we don't bugcheck // if MmMapLockedPages fails pMdl->MdlFlags |= MDL_MAPPING_CAN_FAIL;
// try to map the buffer pMdl->MappedSystemVa = (PVOID)(((ULONG_PTR)MmMapLockedPages(pMdl, KernelMode)) | MmGetMdlByteOffset(pMdl));
// set the original flag back in the MDL if(!canFail) { pMdl->MdlFlags &= ~MDL_MAPPING_CAN_FAIL; } }
return pMdl->MappedSystemVa;
и вот на canFail всё вылетает, а тут еще поглядел пример у них для ReadFile, дак там они используют VirtualAddress. Еще больше запутался. Нам же в дривере нужен физический, а не виртуальный адрес или нет?
|