4

Windows XPでExt2パーティション用のドライバーをインストールしたいのですが、インストールは自作のInnoSetupスクリプトで行われます。これにはどのAPI関数を呼び出す必要がありますか?これまでグーグルで検索したところ、infファイルは必要ないようです。したがって、SetupCopyOEMInfを呼び出す必要はありません。しかし、私は代わりに何をすべきかわかりません...

教えてください!

4

4 に答える 4

6

ドライバーをインストールするために必要な API 関数を尋ねたので、C でドライバーをロードするために使用するコードを次に示します。

bool LoadDriver( const char * cpDriverPath, const char * cpDriverName )
{
    SC_HANDLE hSCService;
    SC_HANDLE hSCManager;

    hSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
    if( hSCManager == NULL )
        return false;

    hSCService = CreateService( hSCManager, cpDriverName, cpDriverName,
                                SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER,
                                SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
                                cpDriverPath, NULL, NULL, NULL, NULL, NULL );

    if( hSCService == NULL && GetLastError() == ERROR_SERVICE_EXISTS )
        hSCService = OpenService( hSCManager, cpDriverName, SERVICE_ALL_ACCESS );

    if( hSCService == NULL )
        return false;

    if( !StartService( hSCService, 0, NULL ) )
    {
        if( GetLastError() != ERROR_SERVICE_ALREADY_RUNNING )
            return false;
    }

    CloseServiceHandle( hSCManager );
    CloseServiceHandle( hSCService );

    return true;
}

ファイル システム ドライバには、SERVICE_DEMAND_START ではなく、SERVICE_BOOT_START を使用することをお勧めします。上記を実行するための Inno スクリプトを作成できない場合は、常に上記から小さな EXE を作成し、インストール後に Inno にそれを実行させることができます。

INF ルートをたどりたい場合は、この Microsoft の記事を参照してください。

于 2009-02-04T12:28:39.647 に答える
0

TDIフィルタードライバーを作成しました。

.infファイルを作成するようになったとき、何かが機能するようになるまでに2週間の苦痛がかかりましたが、それが本当に意味をなさなかったため、私はまだそれを本当に理解していませんでした。あなたがしなければならなかったことは非常に恣意的に見えました。INFファイルは、私がそれらを使おうとしたとき、ほとんど完全に文書化されておらず、非常に複雑でした。

于 2009-03-29T06:47:56.850 に答える