2017-02-11 29 views
0

PCI Expressボードのメモリ空間にアクセスするためのWindowsカーネルモードドライバを作成しました。ドライバのIOコントロールとCreateFileとDeviceIOControl関数を使用して通信できます。 PCIデバイスへの読み取り/書き込みアクセスが必要であるため、ユーザーアプリケーションを管理者権限で実行する必要があるという点を除いて、すべての点で優れています。これは、アプリケーションを実行する際にユーザーに管理者権限を持たせることができないため、私のアプリケーションでは難しい問題です。この問題に対処するために、私はこれまでの以下のアイデアを考え出しました。管理者特権なしでユーザーアプリケーションからドライバIOCo​​ntrolにアクセス

1)ドライバに名前付きパイプを作成し、それをユーザアプリケーションにアクセスしますが、ドライバがWindows APIにアクセスして作成およびアクセスするかどうかはわかりません名前付きパイプ。

2)管理者権限で実行され、ユーザーアプリケーションとドライバの間のインターフェイスになるWindowsサービスを作成します。実用的ですが、このソリューションは過度のものです。

上記の解決方法についてのコメントと、ドライバとの通信のための一般的なプラクティスを感謝します。

ありがとう

+0

DeviceIOControl()を使用することは確かにキラーポークであるため、通常は管理者アクセス権が必要です。ドライバインストーラは、セキュリティキーの値を決定します。例:[Vid_Device.NT.AddReg]セクションについては、c:¥windows¥inf¥wvid.infを参照してください。インストール後にプログラムで実行することは、[ここで説明します](https://msdn.microsoft.com/en-us/library/windows/hardware/ff563755(v=vs.85).aspx)です。 –

答えて

2

ドライバは、作成するデバイスオブジェクトに適切なアクセス許可を割り当てることができます。デフォルトの設定では、管理者はI/O制御要求をデバイスに送信することしかできませんが、好きなように設定することができます。

Securing Device ObjectsというタイトルのMSDNセクションがこれをカバーしています。

1

ご意見ありがとうございます。 WdfDeviceInitAssignSddlStringは私のKMDFで使用する必要があります。このAPIは、ドライバのI/Oコントローラにアクセスするために必要な特権を指定します。

関連する問題