很奇怪的问题,高手请进!
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
功能:个人中心、医院公告管理、用户管理、科室信息管理、医生管理、出诊信息管理、预约时间段管理、预约挂号管理、门诊病历管理、就诊评价管理、系统管理等功能模块。


硬件/系统
