wince6.0下DM9000驱动里增加powerdown关机后省电模式的代码怎么没被执行?
/********************************************************************************************
*
* DriverEntry
*
********************************************************************************************/
extern "C" NTSTATUS DriverEntry(
IN PDRIVER_OBJECT pDriverObject,
IN PUNICODE_STRING pRegistryPath)
{
NDIS_STATUS status;
NDIS_HANDLE hwrapper;
// NDIS40_MINIPORT_CHARACTERISTICS ndischar;
NDIS51_MINIPORT_CHARACTERISTICS DM9000Char; /* add by ZMF */
RETAILMSG(1,(TEXT("[dm9]:[CUSTOM_BOARD_STR]\r\n")));
RETAILMSG(1,(TEXT("[dm9] NewOBJ-2009 \r\n")));
NKDbgPrintfW(TEXT("[dm9] NewOBJ-2009 %s \r\n"), DRIVER_VERSION);
NKDbgPrintfW(TEXT("[dm9] NewOBJ-2009 %s \r\n"), CUSTOM_BOARD_STR);
PUTS(("[dm9] <NDIS40_MINIPORT Driver>\r\n")); //PUTS(("<Davicom DM9000/9000A/9010 driver v2.08_n_later for WinCE 4.2/5.0/6.0>\r\n"));
NdisMInitializeWrapper(
&hwrapper,
pDriverObject,
pRegistryPath,
NULL);
memset((void*)&DM9000Char,0,sizeof(DM9000Char));
DM9000Char.Ndis50Chars.Ndis40Chars.Ndis30Chars.MajorNdisVersion = PRJ_NDIS_MAJOR_VERSION;
DM9000Char.Ndis50Chars.Ndis40Chars.Ndis30Chars.MinorNdisVersion = PRJ_NDIS_MINOR_VERSION;
DM9000Char.Ndis50Chars.Ndis40Chars.Ndis30Chars.InitializeHandler = MiniportInitialize;
DM9000Char.Ndis50Chars.Ndis40Chars.Ndis30Chars.ResetHandler = MiniportReset;
DM9000Char.Ndis50Chars.Ndis40Chars.Ndis30Chars.CheckForHangHandler = MiniportCheckForHang;
DM9000Char.Ndis50Chars.Ndis40Chars.Ndis30Chars.HaltHandler = MiniportHalt;
DM9000Char.Ndis50Chars.Ndis40Chars.Ndis30Chars.HandleInterruptHandler = MiniportInterruptHandler;
DM9000Char.Ndis50Chars.Ndis40Chars.Ndis30Chars.ISRHandler = MiniportISRHandler;
DM9000Char.Ndis50Chars.Ndis40Chars.Ndis30Chars.QueryInformationHandler = MiniportQueryInformation;
DM9000Char.Ndis50Chars.Ndis40Chars.Ndis30Chars.SetInformationHandler = MiniportSetInformation;
DM9000Char.Ndis50Chars.Ndis40Chars.Ndis30Chars.SendHandler = MiniportSend;
// ndischar.Ndis30Chars.DisableInterruptHandler =MiniportDisableInterrupt;
// ndischar.Ndis30Chars.EnableInterruptHandler=MiniportEnableInterrupt;
DM9000Char.AdapterShutdownHandler=MiniportHalt; 这个函数里就是关机后想要被执行的函数。这个函数定义在下面。
if((status = NdisMRegisterMiniport(
hwrapper,
(PNDIS_MINIPORT_CHARACTERISTICS)&DM9000Char,
sizeof(DM9000Char)) != NDIS_STATUS_SUCCESS))
{
NdisTerminateWrapper(hwrapper,NULL);
return status;
}
#ifndef IMPL_DLL_ENTRY
INIT_EXCEPTION();
#endif
return NDIS_STATUS_SUCCESS;
}
上面说的MiniportHalt的定义:
VOID MiniportHalt(
IN NDIS_HANDLE MiniportContext)
{
((NIC_DRIVER_OBJECT*)MiniportContext)->DriverHalt();
}
DriverHalt定义如下:/* ADD BY ZMF FOR PM */
void C_DM9000::DeviceHalt(void)
{
NKDbgPrintfW(TEXT("[dm9]ZMF: DeviceHalt:[dm9] -- \r\n"));
DeviceWritePort(DM9_GPR, 0x01);
DeviceWritePort(DM9_NCR, 0xB800);
DeviceWritePort(DM9_SCTCR,0x01);
// announce shutdown
m_bShutdown = 1;
DeviceDisableInterrupt();
ID_CUSTOM_INT_DIS
}
/* ADD BY ZMF FOR PM */
问题是怎么关机后没有被执行?我在注册表里也增加了ICLASS,如下:
[HKEY_LOCAL_MACHINE\Comm\DM9000]
"DisplayName"="DM9000 Fast Ethernet Adapter"
"Group"="NDIS"
"ImagePath"="DM9000.dll"
"IClass"="{A32942B7-920C-486b-B0E6-92A702A99B35}" ; Power-manageable generic ADD BY ZMF
[HKEY_LOCAL_MACHINE\Comm\DM9000\Linkage]
"Route"=multi_sz:"DM9000"
[HKEY_LOCAL_MACHINE\Comm\DM9000\Parms]
"BusNumber"=dword:0
"BusType"=dword:0
[HKEY_LOCAL_MACHINE\Comm\DM9000\Parms\TcpIp]
"EnableDHCP"=dword:1
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\State\Suspend\{A32942B7-920C-486b-B0E6-92A702A99B35}]
"Default"=dword:4 ; D3
哪位大侠能指导一下?跪谢!