阅读:867回复:3
ReadCompletion中一个奇怪的问题
NTSTATUS
ReadCompleted( PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context ) { PREAD_WRITE_COMPLETION_CONTEXT CompletionCtx = (PREAD_WRITE_COMPLETION_CONTEXT) Context; ULONG Offset = 0; PHOOK_EXTENSION DevExt = DeviceObject->DeviceExtension; if (Irp->PendingReturned) { IoMarkIrpPending(Irp); } IoFreeMdl(Irp->MdlAddress); Irp->MdlAddress = CompletionCtx->OldMdl; Irp->UserBuffer = CompletionCtx->OldUserBuffer; Irp->AssociatedIrp.SystemBuffer = CompletionCtx->OldSystemBuffer; for (Offset = 0; Offset < CompletionCtx->Length; ++Offset) { ((PUCHAR) CompletionCtx->OldBuffer)[Offset] = ((PUCHAR) CompletionCtx->MyBuffer)[Offset] ; } // DbgPrint("ReadCompleted"); DbgPrint("%s", CompletionCtx->MyBuffer); if (CompletionCtx->MdlForUserBuffer) { MmUnlockPages(CompletionCtx->MdlForUserBuffer); IoFreeMdl(CompletionCtx->MdlForUserBuffer); } ExFreePoolWithTag(CompletionCtx->MyBuffer, SFLT_POOL_TAG); ExFreeToNPagedLookasideList(&gReadWriteCompletionCtxLookAsideList, CompletionCtx); return Irp->IoStatus.Status; } |
|
|
沙发#
发布于:2007-09-07 15:53
DbgPrint("%s", CompletionCtx->MyBuffer);
这句话,为什么不能 完全的 把文件内容显示出来 有时可以显示~ |
|
|
板凳#
发布于:2007-09-12 09:56
改为:DbgPrint("%ws", CompletionCtx->MyBuffer);
|
|
地板#
发布于:2007-09-12 10:05
原因找到了,
1,cache的原因 2,是dbgprint无法处里特殊字符, 只能无符号输出,如果转成 char* 会造成丢失 |
|
|