0

winUSBの助けを本当に感謝します。msdn Web サイトにリストされているすべての手順に従いました

http://msdn.microsoft.com/en-us/library/windows/hardware/hh450799(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/hardware/ff540174(v=vs.85).aspx

Visual Studio 2010 を使用して Windows 7 で実行しようとしました。コンパイルはエラーなしで実行されますが、関数 SetupDiEnumDeviceInfo を渡すことができず、エラーが発生します (エラー #259 だと思います)。このエラーを渡す方法がわかりません。

ただし、プロセスのいくつかの手順についてはわかりません。

  1. msdn は、「パッケージの署名済みカタログ ファイル。このファイルは、x64 バージョンに WinUSB をインストールするために必要です」と何について話しているのですか? 署名済みカタログ パッケージとは何ですか? これを設定するにはどうすればよいですか?
  2. また、いくつかのディレクトリ (たとえば、c:\UsbDevice) を作成して、そこに .inf ファイルを配置することについても説明しています。しかし、私の VS プロジェクトは、私が c:\UsbDevice を指していることをどのように認識し、「.inf」ファイルの名前がどうあるべきかをどのように認識しますか?.inf ファイルを何と呼べばよいでしょうか?また、プロジェクトを指す方法それに?
  3. .inf ファイル内には、2 つの GUID 番号があります。デバイス マネージャーに移動すると、クラス GUID 番号を取得できます。しかし、デバイス インターフェイス GUID を設定するにはどうすればよいでしょうか。助けてください。次の項目のいずれかが正しく設定されていないため、エラーが発生している可能性はありますか?

ありがとう、 --
ルディ

4

1 に答える 1

0

私は約 2 年前に WinUSB を使用する必要があるアプリケーションを開発しました。それは私の心に新鮮ではありませんが、今私のコードを見ると、この関数を使用したことがわかります: SetupDiEnumDeviceInfo ですが、私が覚えているように、それは問題ではありませんでした自分。

ご存じのとおり、WinUSB は USB ハードウェアと通信するための Windows の API です。ハードウェアには既にドライバーが必要なので、デバイスの GUID を知っておく必要があります。

手順への回答:
1. 署名済みカタログは、inf から生成された .cat ファイルです。inf2cat.exe を使用して生成できます。これはマシンのどこかにあります。これは、winusb ドライバーに署名するための単なるステップです。署名するには、.inf ファイルと .cat ファイルを WHQL (Windows ハードウェア品質ラボ) http://www.microsoft.com/whdc/whql/に提出する必要がありますが、これは現時点では重要ではありません。 WinUSB ドライバーに署名したことがなく、x64 マシンで動作し、WinUSB ドライバーが危険である可能性があるという洗練されていない警告が表示されます (危険ではないにもかかわらず!)。
2. 開発中のアプリケーションは、.inf ファイルの場所を知る必要はありません。.inf ファイルは、WinUSB ドライバーをインストールするためのものです。アプリケーションは、ドライバーがインストールされた後、デバイスの GUID 番号を介してドライバーと通信します。適切にインストールされています。WinUSB ドライバーが正しくインストールされた後、デバイスに接続するために必要なコードの一部を次に示します。

LPGUID _lpGuid = (LPGUID) malloc (sizeof(GUID));
HRESULT result = CLSIDFromString (L"{A54E04AD-E06A-4A03-95BB-25AACC4E6CCA}", _lpGuid);

    ...

bResult = SetupDiEnumDeviceInterfaces(deviceInfo,
                                    NULL,
                                    _lpGuid,
                                    0,
                                    &interfaceData);    //If the function succeeds
                                    //the return value is nonzero.
    // [1]
deviceInfo = SetupDiGetClassDevs(_lpGuid,
                 NULL, NULL,
                 DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);

if (deviceInfo == INVALID_HANDLE_VALUE)
{
    //lblDispStatus->Caption = "Erro 1 - deviceInfo";
    return false;
}

    // [2]
interfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
bResult = SetupDiEnumDeviceInterfaces(deviceInfo,
                                    NULL,
                                    _lpGuid,
                                    0,
                                    &interfaceData);    //If the function succeeds
                                                        //the return value is nonzero.

InterfaceData は参照として渡されるため、次の関数である SetupDiGetDeviceInterfaceDetail を呼び出すことができます。

3.ドライバーの開発者は?彼はあなたが必要とする GUID を知っている必要があります。

私がWinUSBから知っていることは、貧弱なWinUSBのドキュメントで見つけたものですが、それらの厄介な情報をすべて読むには、たくさんの忍耐が必要です。残念ながら、それは私の心に新鮮ではありません.

このページはあなたがいる時点で重要だと思われます

于 2013-01-25T15:38:51.443 に答える