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

zymoonstone 2006-07-18 06:35:57
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冲突,已运行就蓝屏,搞不明白为什么,望高手指教。
...全文
196 1 打赏 收藏 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
bsonlinedown 2006-07-19
  • 打赏
  • 举报
回复
是驱动吗?

http://community.csdn.net/Expert/topic/4889/4889166.xml?temp=.3476374
内容概要:本文基于Matlab/Simulink平台,对电励磁同步电机在异步牵入、稳态运行及能耗制动三个阶段的全周期动态特性进行建模仿真与系统研究。研究构建了完整的电机数学模型与仿真系统,重点分析了电机从异步启动到同步运行的过渡过程、稳态运行时的电磁与机械性能,以及执行能耗制动时的减速特性与能量耗散机理。通过仿真,揭示了励磁电流、负载转矩与转速在不同工况下的动态响应规律与耦合关系,为电机的控制策略设计与性能优化提供了理论依据和数据支持。; 适合人群:具备电机学、电力电子与电力拖动基础知识的电气工程及相关专业的研究生、科研人员与工程技术人员。; 使用场景及目标:①研究电励磁同步电机的启动特性,解决异步牵入过程不稳定或失败的问题;②分析电机在不同负载下的稳态运行性能,优化运行效率;③设计和验证能耗制动策略,精确控制制动过程的减速时间和能量消耗。; 阅读建议:在学习过程中,应结合电机的基本原理,深入理解仿真模型中各模块(如电机本体、励磁控制、负载模型)的搭建逻辑,并通过调整仿真参数(如励磁电压、负载大小)来观察和分析系统动态响应,以加深对电机全周期运行特性的理解。

2,644

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧