どのAPI機能のWindowsのファイルシステムドライバをインストールするには?

StackOverflow https://stackoverflow.com/questions/499359

  •  20-08-2019
  •  | 
  •  

質問

私は、Windows XPの下ではext2パーティション用のドライバをインストールすると、インストールは自己書かれたInno Setupのスクリプトを使用して行われます。どのAPI機能私はこのためにコールする必要がありますか?私がこれまでにググ何から私はそのためSetupCopyOEMInfへの呼び出しをINFファイルを必要としない、とされていないようです。でも、私が代わりに何をするか分からない...

私を啓発してください!

役に立ちましたか?

解決

あなたは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_NAME DEMAND_ STARTのファイルシステムドライバのためにあるSERVICE_NAME BOOT_ STARTを使用します。あなたが書くカント場合、上記実行するのInnoスクリプトは常に上から小さなEXEを作成し、革新は、ポストインストールとしてそれを実行する可能性があります。

あなたは、INFのルートを下るこのMicrosoftの記事をチェックアウトしたい場合は。

他のヒント

すべての権利、私はいくつかのより多くの情報を見つけます:

<全角>

MSDN の状態 "をインストールする必要がありINFファイル使用して、ファイルシステムドライバ「を(SetupCopyOEMInfなどを呼び出すことによって)だけでなく、Win2kのと古いシステム上で、のことに注意」ファイルシステムドライバは、一般的にサービスコントロールマネージャ '

そして、私は革新セットアップインストールスクリプトが付属していますsourceforgeのので別の Ext2のドライバを見つけました。そこに彼らはただHKLM\SYSTEM\CurrentControlSet\Services\の下にいくつかのレジストリエントリを追加します。

私はこれらのエントリを追加すると、内部sc.exeOpenSCManager APIを呼び出すCreateServiceツールとサービスを作成するに等しいと考えています。それは簡単ですし、私は再起動が常に必要とされているため、API呼び出しを使用して何の利点を見ていないので、私は、レジストリの道を好むます。

だから私はこの解決策になってしまった。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\YourService]
"ErrorControl"=dword:00000001
"Start"=dword:00000003
"Type"=dword:00000001
"DisplayName"="YourServiceDisplayName"
"ImagePath"="System32\Drivers\YourService.sys"

もちろん、問題のドライバの仕様に応じて、Parametersサブキーでいくつかのより多くのエントリが必要になることがあります。

私はまだ誰かが、この質問に、これはMSが推奨する方法であるため、インストール用のINFファイルを使用する方法について、具体的詳細の一部をいくつかのより多くの光を当てることができるようになりますことを期待しています。

、人々を是非!ここにキャッチする素敵な恵みがあります!

あなたはこれに近づくことができ、いくつかの方法があります。

1 /製品は、サイレントインストールモードを有する場合(例えば、構成ファイルを使用してインストールする)を参照。そして、あなたは自分自身にインストールすることを取り入れています。

2 /などRational Robotはなどのユーザをエミュレートすることができますプログラムは、(私はそれが商用だから1つを提案したが、周りに無料のものがありそうだしません)があります。私たちは、主に、グラフィカルアプリケーションの自動テストのためにこれらを使用しますが、彼らは同じように簡単にインストーラを実行するために使用することができます。

3 /実際には、そのコピーを伴うプロセスをインストールするかを確認するために、開発者にお問い合わせください。

4 /マイクロソフトは、ように、ファイルシステム、レジストリへの変更を追跡することができ(ここでは)システムツールの数を持っています。あなたは、インストールプロセスを、あなた自身のインストール中に、同じことを行う、リバースエンジニアリングするには、これらを使用することができます。

個人的に、私は最初の数3で行くと思います。開発者は、使用されている自社の製品を知って幸せになると容易に情報を提供することができます。これは、企業環境での製品のための余分なセールスポイントになると彼らは(彼らにこれを示唆して)あなたのためのサイレントインストーラを作成することがあります。

私は、TDIフィルタドライバを書いています。

私は.infファイルを書き込むために来たとき、それが何かの作業を取得するために莫大な痛みの二週間を取り、それは本当に意味がありませんでしたので、私はまだ実際に、それを理解していませんでした。何をしなければならなかったことは非常に任意のように見えました。 INFファイルは、いた私はそれらを使用しようとしていたとき、ほとんど完全に文書化されていないとbizzarely複雑ます。

scroll top