很奇怪的问题,高手请进!

zymoonstone zymoonstone 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
status = IoCallDriver(((PDEVICE_EXTENSION) DeviceObject->DeviceExtension)->FileSystemDeviceObject, Irp);
if(STATUS_PENDING == status)
{
NTSTATUS localStatus = KeWaitForSingleObject(&waitEvent, Executive, KernelMode, FALSE, NULL);
ASSERT(STATUS_SUCCESS == localStatus);
}

if (NT_SUCCESS(Irp->IoStatus.Status)&& IrpSp->FileObject !=NULL)
{
FILE_STANDARD_INFORMATION StdInfo;
if(QueryStdInfo(IrpSp->FileObject, ((PDEVICE_EXTENSION) DeviceObject->DeviceExtension)->FileSystemDeviceObject, &StdInfo))
bIsDir = StdInfo.Directory;
else
{
if(FilePath != NULL)
ExFreePool(FilePath);
IoCancelFileOpen(((PDEVICE_EXTENSION) DeviceObject->DeviceExtension)->FileSystemDeviceObject,IrpSp->FileObject);
goto EXIT_BLOCK_RES_IRP;
}
if ((FilePath!=NULL)&&(IrpSp->FileObject->FsContext!=NULL))
{
if (!AddHashEntry(FilePath,IrpSp->FileObject, bIsDir,ucObjAttr,ObjectType))
{
if(FilePath != NULL)
ExFreePool(FilePath);
IoCancelFileOpen(((PDEVICE_EXTENSION) DeviceObject->DeviceExtension)->FileSystemDeviceObject,IrpSp->FileObject);
goto EXIT_BLOCK_RES_IRP;
}
}
}
以上是create例程的代码,其中QueryStdInfo函数如下
BOOLEAN QueryStdInfo(PFILE_OBJECT FileObject, PDEVICE_OBJECT DeviceObject,
PFILE_STANDARD_INFORMATION FileStdInfo)
{
IO_STATUS_BLOCK IoStatusBlock;
PIRP Irp;
PIO_STACK_LOCATION StackPtr;
KEVENT Event;
NTSTATUS Status;
KeInitializeEvent(&Event,SynchronizationEvent,FALSE);
if (FileStdInfo == NULL)
return FALSE;

Irp = IoAllocateIrp(DeviceObject->StackSize,
FALSE);
if (Irp == NULL)
{
return FALSE;
}

Irp->AssociatedIrp.SystemBuffer = FileStdInfo;
Irp->UserIosb = &IoStatusBlock;
Irp->UserEvent = &Event;
Irp->RequestorMode = KernelMode;
Irp->Tail.Overlay.Thread = PsGetCurrentThread();
Irp->Tail.Overlay.OriginalFileObject = FileObject;

StackPtr = IoGetNextIrpStackLocation(Irp);
StackPtr->MajorFunction = IRP_MJ_QUERY_INFORMATION;
StackPtr->MinorFunction = 0;
StackPtr->Flags = 0;
StackPtr->Control = 0;
StackPtr->DeviceObject = DeviceObject;
StackPtr->FileObject = FileObject;

StackPtr->Parameters.QueryFile.FileInformationClass =
FileStandardInformation;
StackPtr->Parameters.QueryFile.Length = sizeof(FILE_STANDARD_INFORMATION);

IoSetCompletionRoutine(Irp, QueryStdInfoComplete, 0, TRUE, TRUE, TRUE);
Status = IoCallDriver(DeviceObject,Irp);
KeWaitForSingleObject(&Event,Executive,KernelMode,FALSE,NULL);

return (NT_SUCCESS(IoStatusBlock.Status));
}

NTSTATUS
QueryStdInfoComplete(PDEVICE_OBJECT DeviceObject,
PIRP Irp,
PVOID Context)
//
// FilemonQueryFileNameComplete
//
// This routine is used to handle I/O completion for our self-generated
// IRP that is used to query a file's name.
//
{
//
// Copy the status information back into the "user" IOSB.
//
*Irp->UserIosb = Irp->IoStatus;

// Set the user event - wakes up the mainline code doing this.
//
KeSetEvent(Irp->UserEvent, 0, FALSE);

//
// Free the IRP now that we are done with it. //

IoFreeIrp(Irp);
//
// We return STATUS_MORE_PROCESSING_REQUIRED because this "magic" return value
// tells the I/O Manager that additional processing will be done by this driver
// to the IRP - in fact, it might (as it is in this case) already BE done - and
// the IRP cannot be completed.
//
return STATUS_MORE_PROCESSING_REQUIRED;
}

但是这样在访问网上共享文件时出现死锁,于是将代码该为
if(STATUS_PENDING == Status && FileObject->Flags & FO_SYNCHRONOUS_IO)

{
KeWaitForSingleObject(&Event,Executive,KernelMode,FALSE,NULL);
}
结果和clearcase冲突,已运行就蓝屏,搞不明白为什么,望高手指教。
...全文

相关推荐

基于ssm的医院病历管理系统源代码(完整前后端+mysql+说明文档+LW).zip

功能说明: 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上。。。

码农落落

基于ssm的医院电子病历管理系统源代码(完整前后端+mysql+说明文档+LW).zip

功能说明: 功能:个人中心、医院公告管理、用户管理、科室信息管理、医生管理、出诊信息管理、预约时间段管理、预约挂号管理、门诊病历管理、就诊评价管理、系统管理等功能模块。环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上。。。

码农落落

基于Java的医院电子病历管理系统源码+文档.zip

java毕业设计之医院电子病历管理系统(项目源码+sql数据库+说明文档+LW+答辩ppt+演示视频) 主要功能实现: 管理员;个人中心、医院公告管理、用户管理、科室信息管理、医生管理、出诊信息管理、预约时间段管理、预约挂号管理、门诊病历管理、就诊评价管理、系统管理, 医生;个人中心、出诊信息管理、预约挂号管理、门诊病历管理、就诊评价管理, 用户;个人中心、预约挂号管理、门诊病历管理、就诊评价管理、我的收藏管理, 前台首页;首页、医院公告、科室信息、出诊信息、我的、跳转到后台等信息管理功能, 开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9

出世&入世

基于ssm+mysql的医院病历管理系统(含LW+PPT+源码+系统演示视频+安装说明).zip

基于ssm+mysql的医院病历管理系统(含LW+PPT+源码+系统演示视频+安装说明)

计算机搬砖艺术家

java毕业设计之医院电子病历管理系统源码(ssm+jsp+mysql+LW).zip

功能:个人中心、医院公告管理、用户管理、科室信息管理、医生管理、出诊信息管理、预约时间段管理、预约挂号管理、门诊病历管理、就诊评价管理、系统管理等功能模块。

码农落落
评论 1
收藏 已收藏
分享
返回顶部
zymoonstone
硬件/系统 2,644 成员 17,229 内容