阅读:2196回复:8
好痛苦,定时器问题,机器蓝屏了!
小弟想测试一下在passthru中使用定时器(2000环境下),安装后机器在也启动不了了,总时蓝屏。
我在passthru下作了如下修改: 在passthru.h中添加: // add timer PNDIS_MINIPORT_TIMER pTimer; /////add timer function extern VOID TimerFunction( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3 ); 在passthru.c中添加: VOID TimerFunction( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3 ) { DbgPrint ("hello"); } 在MPInitialize中添加: //Initialize a timer NdisMInitializeTimer( pTimer, pAdapt->MiniportHandle, (PNDIS_TIMER_FUNCTION)TimerFunction, NULL ); //Set the timer NdisMSetPeriodicTimer( pTimer, 1000 //1000 MillisecondsPeriod=1 second ); 不知道是哪里出错了。 顺便问一下能不能 不装机解决机器重启的问题? 出现蓝屏不能启动真是太痛苦了。 |
|
沙发#
发布于:2004-03-04 20:12
我也是新手,我是这样用的,你看看行不行啊?
/*定时器函数*/ void TimerFunc(IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2) { /* 自定义动作*/ } /*全局变量*/ KTIMER Timer; KDPC Dpc; LARGE_INTEGER interval; /*入口函数*/ NTSTATUS DriverEntry(.......) { ............ ............ // // 设置定时器 // interval.QuadPart=-1000; KeInitializeTimer(&Timer); KeInitializeDpc(&Dpc,TimerFunc,NULL); KeSetTimerEx(&Timer,interval,500,&Dpc); ............ ............ } |
|
板凳#
发布于:2004-03-04 21:21
老兄,谢谢你的回复
你给我的代码好像是一般的驱动程序定时器的使用 在这里,需要类似 ndis×××这样的函数 不知你是否知道如何解决 机器启动是蓝屏问题? |
|
地板#
发布于:2004-03-05 09:35
蓝屏报什么错啊?用SI跟踪调一下。
NdisMInitializeTimer要放在NdisMSetAttributesEx后面的,你注意了吗?…… |
|
|
地下室#
发布于:2004-03-05 15:52
在使用定时器前,我仔细读了ddk的文档
我把NdisMInitializeTimer方在了NdisMSetAttributesEx的后面 在Status = NDIS_STATUS_SUCCESS;这条语句前 蓝屏是win2000系统启动时候蓝屏 系统启动不了 |
|
5楼#
发布于:2004-03-05 18:44
嘿,我的问题解决了
初步认为是NdisMInitializeTimer( &pAdapt->PacketProcessTimer, MiniportAdapterHandle, (PNDIS_TIMER_FUNCTION)PacketProcessTimerCallback, pAdapt); 的第三个参数错了 |
|
6楼#
发布于:2004-03-07 23:54
至少我认为你的代码有一个错误:
PNDIS_MINIPORT_TIMER pTimer; NdisMInitializeTimer( pTimer, pAdapt->MiniportHandle, (PNDIS_TIMER_FUNCTION)TimerFunction, NULL ); 错误就在你的定义上,你仔细比较一下下面的这个代码: NDIS_TIMER timer; NdisInitializeTimer( &timer, func, NULL ); NdisSetTimer( &timer, 2000 ); |
|
7楼#
发布于:2004-08-26 09:56
至少我认为你的代码有一个错误: NdisMInitializeTimer与NdisInitializeTimer两个是有区别的。 我的是按照这个来的(wengyu100说是按这个解决问题的):NdisMInitializeTimer( &pAdapt->PacketProcessTimer, MiniportAdapterHandle, (PNDIS_TIMER_FUNCTION)PacketProcessTimerCallback, pAdapt); 但是我的死活通不过,不知何故? |
|
|
8楼#
发布于:2004-08-26 11:57
NdisMInitializeTimer
NdisMInitializeTimer initializes a timer object associated with a driver’s MiniportTimer function. VOID NdisMInitializeTimer( IN OUT PNDIS_MINIPORT_TIMER Timer, IN NDIS_HANDLE MiniportAdapterHandle, IN PNDIS_TIMER_FUNCTION TimerFunction, IN PVOID FunctionContext ); Parameters Timer Pointer to caller-supplied, resident storage for a timer object. 应该这样调用吧,:) NDIS_MINIPORT_TIMER Timer; NdisMInitializeTimer( &Timer, ... ); The timer object is opaque to the caller, but, when it has been initialized, this pointer is a required parameter to the NdisM..Timer functions. [编辑 - 8/26/04 by tooflat] |
|