关于内存卡的驱动,急急

mfc_boy 2003-04-25 08:42:38
我现在正在做给笔记本的PCMCIA的Sram卡写驱动程序,遇到了一个非常奇怪的问题,请大家帮帮忙
1、我的inf文件的Class是MTD。
2、在AddDevice的时候没有错误返回。
3、在进行DispatchPnp处理IRP_MN_START_DEVICE的时候,一调用IoCallDriver的时候,笔记本就发出鸣叫声,然后返回的错误是STATUS_INSUFFICIENT_RESOURCES。

我真的不知道是哪里错了,希望大家帮帮我,我的分数最多就只能给20。

NTSTATUS DispatchPnp(PDEVICE_OBJECT fdo, PIRP Irp)
{ // DispatchPnp
NTSTATUS stat;
PDEVICE_EXTENSION pDe=(PDEVICE_EXTENSION)fdo->DeviceExtension;
PIO_STACK_LOCATION pIrpStk=IoGetCurrentIrpStackLocation(Irp);
KEVENT event;

stat = IoAcquireRemoveLock(&pDe->RemoveLock,NULL);
if( !NT_SUCCESS(stat) ) return CompleteRequest(Irp,stat,0);

switch( pIrpStk->MinorFunction ) {
case IRP_MN_START_DEVICE:
IoCopyCurrentIrpStackLocationToNext(Irp);

KeInitializeEvent(&event,NotificationEvent,FALSE);

IoSetCompletionRoutine(Irp,
(PIO_COMPLETION_ROUTINE)CompletionRoutine,&event,
TRUE,TRUE,TRUE);

//stat = PnpDefaHand(fdo,Irp);
stat = IoCallDriver(pDe->LowerDeviceObject,Irp);
if( stat==STATUS_PENDING ) {
KeWaitForSingleObject(&event,Executive,KernelMode,FALSE,NULL);
stat = Irp->IoStatus.Status;
}
if( !NT_SUCCESS(stat) ) {
stat = CompleteRequest(Irp,stat,Irp->IoStatus.Information);
break;
}
stat = StartDevice(fdo,pIrpStk);
if( NT_SUCCESS(stat) ) IoSetDeviceInterfaceState(&pDe->ifname,TRUE);
stat = CompleteRequest(Irp,stat,0);
break;
case IRP_MN_QUERY_STOP_DEVICE:
Irp->IoStatus.Status = STATUS_SUCCESS;
stat = PnpDefaHand(fdo,Irp);
break;
case IRP_MN_QUERY_REMOVE_DEVICE:
Irp->IoStatus.Status = STATUS_SUCCESS;
stat = PnpDefaHand(fdo,Irp);
break;
case IRP_MN_SURPRISE_REMOVAL:
RemoveDevice(Irp,pDe);
Irp->IoStatus.Status = STATUS_SUCCESS;
stat = PnpDefaHand(fdo,Irp);
break;
case IRP_MN_REMOVE_DEVICE:
IoReleaseRemoveLockAndWait(&pDe->RemoveLock,Irp);
RemoveDevice(Irp,pDe);
Irp->IoStatus.Status = STATUS_SUCCESS;
stat = PnpDefaHand(fdo,Irp);
IoSetDeviceInterfaceState(&pDe->ifname,FALSE);
RtlFreeUnicodeString(&pDe->ifname);
IoDetachDevice(pDe->LowerDeviceObject);
IoDeleteDevice(fdo);
return stat;
case IRP_MN_STOP_DEVICE:
RemoveDevice(Irp,pDe);
Irp->IoStatus.Status = STATUS_SUCCESS;
stat = PnpDefaHand(fdo,Irp);
break;
case IRP_MN_CANCEL_REMOVE_DEVICE:
case IRP_MN_CANCEL_STOP_DEVICE:
Irp->IoStatus.Status = STATUS_SUCCESS;
stat = PnpDefaHand(fdo,Irp);
break;
/*case IRP_MN_QUERY_INTERFACE:
stat = IoCallDriver(pDe->LowerDeviceObject,Irp);
if( stat==STATUS_PENDING ) {
KeWaitForSingleObject(&event,Executive,KernelMode,FALSE,NULL);
stat = Irp->IoStatus.Status;
}
if( !NT_SUCCESS(stat) )
{
stat = CompleteRequest(Irp,stat,Irp->IoStatus.Information);
}
break;*/
case 0x18:
break;
default:
stat = PnpDefaHand(fdo,Irp);
}
if( !NT_SUCCESS(stat) )
{
stat = stat;
}

IoReleaseRemoveLock(&pDe->RemoveLock,NULL);
return stat;
}
...全文
176 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mfc_boy 2003-04-29
  • 打赏
  • 举报
回复
服了
mfc_boy 2003-04-25
  • 打赏
  • 举报
回复
如果需要源代码,我给大家发
mfc_boy 2003-04-25
  • 打赏
  • 举报
回复
为什么没有人回答我的问题呢?
内容概要:本研究聚焦于绿电直连型电氢氨园区的优化运行,提出一种集成绿色电力直接供给、电解水制氢及氢气合成氨工艺的综合能源系统架构。通过建立包含风光发电、电解槽、氨合成反应器、储氢罐、电网交互及多类型负荷在内的系统模型,综合考虑绿电直供优先、能量梯级利用与多能互补原则,构建以系统综合运行成本最小化为目标的优化调度模型。研究采用Matlab与Python工具进行算法求解和仿真分析,利用实际气象与负荷数据完成案例验证,评估了不同运行策略下系统的经济性、可再生能源消纳能力与碳减排效益,为新型电氢氨一体化园区的规划与运行提供了理论依据和技术支撑。; 适合人群:具备一定电力系统、新能源或化工背景的研究生、科研人员及从事综合能源系统规划与优化工作的工程技术人员。; 使用场景及目标:①用于科研学习,理解电-氢-氨多能转换系统的建模与优化方法;②为工业园区的低碳化、智能化改造提供技术参考与决策支持;③作为开发类似综合能源管理系统的理论基础。; 阅读建议:此资源包含完整的模型代码、数据与论文,使用者应结合代码仔细研读论文中的模型构建部分,重点关注目标函数与约束条件的设计逻辑,并尝试修改参数进行仿真,以深入掌握优化算法在实际系统中的应用。

21,620

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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