ストリーム デバイス ドライバーを WinCE 5 から WinCE 6 に移行しようとしましたが、CreateFile() でインターフェイスを開くときに問題が発生しました。しかし、最初から:
次のレジストリ情報を Platform.reg に追加しました。
[HKEY_LOCAL_MACHINE\Drivers\MyDriver\DRV]
"Index"=dword:1
"DLL"="MyDriver.DLL"
"Prefix"="DRV"
Platform.bib には、次のようにドライバーを含めました。
MyDriver.dll $(_FLATRELEASEDIR)\MyDriver.dll NK SHK
ドライバーは OS デザインの dirs ファイルに追加され、Visual Studio ソリューションでドライバーを正常にビルドできます。
私のアプリケーションでは、ActivateDeviceEx によってドライバーを手動でロードします。
#define DRIVERSHELL_REG_KEY (TEXT("Drivers\\MyDriver\\DRV"))
hDriverShell = ActivateDeviceEx( DRIVERSHELL_REG_KEY,
NULL,
0,
NULL
);
ここでの結果は0でもINVALID_HANDLE_VALUEでもないので、ドライバは正常にロードされていると思います。
CreateFile() でドライバーを開こうとすると:
hDS = CreateFile(TEXT("DRV1:")
, GENERIC_READ|GENERIC_WRITE
, FILE_SHARE_READ | FILE_SHARE_WRITE
, NULL
, OPEN_EXISTING
, FILE_ATTRIBUTE_NORMAL
, 0);
GetLastError は 1359 を返します。エラーには次のように記載されています。
1359 ERROR_INTERNAL_ERROR (説明: セキュリティ アカウント データベースに内部矛盾があります)
前述のように、ドライバーは動作中の WinCE 5 イメージから移行されます。すべてのストリーム インターフェイス関数は、ドライバーのソース コードで宣言されます (xxx_init()、xxx_open()...)。このエラーの原因や、詳しく調べる必要がある詳細を知っている人はいますか?
編集:回答ありがとうございます!イメージと実装されたドライバーのデバッグに成功しました。「ActivateDeviceEx()」は「XXX_Init()」を呼び出し、「CreateFile()」は「XXX_Open()」を呼び出します。各ドライバー関数にブレークポイントを設定し、それに到達しました。ここまでは順調ですね。デバイス (ジョイスティック、ドライバーは HID ジョイスティック ドライバー) を接続したときに関数 "HIDDeviceAttach()" が呼び出されないという問題を特定しました。次に、一部のハンドルが 0 になり、XXX_Open() が内部エラーを LastError として設定します。OS はどのデバイスが USB バスに接続されているか、どの HIDDeviceAttach() 関数を呼び出す必要があるか (マウス/キーボード/ジョイスティック) をどのように認識しますか? [ところで: これに関して新しい質問をしましょうか?]