xpostzf
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2004-07-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:751回复:1

CacheControlRequest代码分析

楼主#
更多 发布于:2004-07-09 09:36
谁能帮我分析这断代码? 刚开始写Driver的。 10分
NTSTATUS CacheControlRequest(PDEVICE_EXTENSION pdx, PIRP Irp, PIRP* pIrp)
{
ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);

KIRQL oldirql;
KeAcquireSpinLock(&pdx->IoctlListLock, &oldirql);

NTSTATUS status;

if (*pIrp)
{
status = STATUS_UNSUCCESSFUL;                          // Something already cached here
}
else if (pdx->IoctlAbortStatus)
{
status = pdx->IoctlAbortStatus;                   // Rejecting new IRPs for some reason
}
else
{                                                   // Try to cache IRP
IoSetCancelRoutine(Irp, OnCancelPendingIoctl);
if (Irp->Cancel && IoSetCancelRoutine(Irp, NULL))
{
status = STATUS_CANCELLED;                      // Already cancelled
}
else
{                                                 // If to cache it
IoMarkIrpPending(Irp);
status = STATUS_PENDING;

PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp);
stack->Parameters.Others.Argument1 = (PVOID) pIrp;
IoSetCompletionRoutine(Irp, (PIO_COMPLETION_ROUTINE) OnCompletePendingIoctl, (PVOID) pdx, TRUE, TRUE, TRUE);

IoSetNextIrpStackLocation(Irp);                 // So our completion routine will get called
PFILE_OBJECT fop = stack->FileObject;
stack = IoGetCurrentIrpStackLocation(Irp);
stack->DeviceObject = pdx->DeviceObject;        // So IoCancelIrp can give us right ptr
stack->FileObject   = fop;                      // For cleanup

*pIrp = Irp;
InsertTailList(&pdx->PendingIoctlList, &Irp->Tail.Overlay.ListEntry);
}
}

KeReleaseSpinLock(&pdx->IoctlListLock, oldirql);
return status;
}
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-09 11:47
分析个什么?????????????????????????
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部