私はドライバー開発を始めたばかりで、起動時にオペレーティングシステムを介してデバイスドライバーを初期化しようとしています。ドライバーはWindowsEmbeddedCE6.0用です。
デバイスが初期化されるたびに、シリアルポートを介してPCにメッセージを送信させようとしています。
DWORD MYD_Init(LPCTSTR pContext, LPCVOID lpvBusContext)
{
DWORD dwResult = 1;
RETAILMSG(TRUE, (TEXT("MyDriver: Initializing!\n")));
DEBUGMSG(TRUE, (TEXT("MyDriver: Initializing!\n")));
return dwResult;
} //end MYD_Init
DLLEntry関数が呼び出されます。
BOOL DllEntry(HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved)
{
switch (dwReason) {
case DLL_PROCESS_ATTACH:
RETAILMSG(TRUE, (TEXT("MyDriver - Process Attached\n")));
DEBUGMSG(TRUE, (TEXT("MyDriver - Process Attached\n")));
break;
case DLL_PROCESS_DETACH:
RETAILMSG(TRUE, (TEXT("MyDriver - Process Detached\n")));
DEBUGMSG(TRUE, (TEXT("MyDriver - Process Detached\n")));
break;
.......
default:
break;
} //end Switch
return TRUE;
} //end DllEntry
そして、ここにシリアルポートログからの数行があります:
FMD_Init: Blocks reserved for the bootloader/run-time image: 3124
I2C Driver: Intialization Started
MyDriver - Process AttachedMyDriver - Process DetachedTurn on clocks for Device block (in OTG_CTRL)
2589 CUSBFN::IsConfigurationSupportable
2593 CUSBFN::IsEndpointSupportable
2595 CUSBFN::IsEndpointSupportable
3行目は、ドライバーがロードされていることを示していますが(私は思う)、MYD_Initは後で呼び出されません。何が欠けているのかわかりません。別のファイルから参照が欠落している可能性があります。私の.defファイルには、EXPORTSの下にMYD_Initが含まれています。.regキーは、BuiltInパス[HKEY_LOCAL_MACHINE \ Drivers \ BuiltIn\MyDriver]内にあります。他にあるかどうかわからない。
私の本当の質問は、MYD_Init関数を呼び出すために私が見逃している/忘れている可能性のあるものは何ですか?
私がこの仕事をするのを手伝うためにあなたたちが提供できるどんな助けにも感謝します!
編集:
CreateFile関数が呼び出されないことに気づき、これが私の問題の原因であると感じています。DllEntryの前にMYD_Initが呼び出されないように、この関数をどこに配置する必要があるかを理解するために実行できるいくつかの手順は何ですか?
または多分ActivateDevice/ActiveDeviceEx関数?OSは、[HKEY_LOCAL_MACHINE \ Drivers \ BuiltIn]の下にリストされているドライバーに対してこれらを自動的に呼び出しますか、それとも手動で呼び出す必要がありますか?
提供できる洞察に改めて感謝します!
編集2:
読みやすいレジストリ設定は次のとおりです。
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\MyDriver]
"Prefix"="MYD"
"Dll"="myDriver.dll"
"Index"=dword:1
"Flags"=dword:0
編集3:
これは、アプリケーションを介してドライバーを開こうとした後の出力です。
USBFN: dwDeviceStatus: 0x11, m_fAttached: Attached
USBFN: dwDeviceStatus: 0x1, m_fAttached: Attached
MyDriver - Process Attached
MyDriver - Process Detached
COM_Open
COM_Open
IOCTL_SERIAL_SET_COMMTIMEOUTS (50,1,50,5,500)
IOCTL_SERIAL_SET_COMMTIMEOUTS (50,1,50,5,500)
IOCTL_SERIAL_SET_COMMTIMEOUTS (-1,0,0,2,500)
Testing Driver
MyDriver - Process Attached
MyDriver - Process Detached
Driver Tested
3行目と4行目は、システムの起動中のロードの試行です。最後の4行は、ドライバーをロードするアプリケーションの実行時に出力されます。「TestingDriver」と「DriverTested」は、アプリケーションの最初と最後に配置されました。
編集4:ダンプビン出力
Dump of file myDriver.dll
File Type: DLL
Section contains the following exports for myDriver.dll
00000000 characteristics
501012DA time date stamp Wed Jul 25 10:38:02 2012
0.00 version
1 ordinal base
9 number of functions
9 number of names
ordinal hint RVA name
1 0 000013D4 DllEntry = DllEntry
2 1 00001348 MYD_Close = MYD_Close
3 2 0000130C MYD_Deinit = MYD_Deinit
4 3 000013B8 MYD_IOControl = MYD_IOControl
5 4 000012B8 MYD_Init = MYD_Init
6 5 00001328 MYD_Open = MYD_Open
7 6 00001364 MYD_Read = MYD_Read
8 7 0000139C MYD_Seek = MYD_Seek
9 8 00001380 MYD_Write = MYD_Write
Summary
1000 .data
1000 .pdata
1000 .reloc
1000 .text