Windows のユーザー モード アプリケーションから、いくつかの異なる情報をカーネル モード ドライバーに渡そうとしています。自分が何をしているのかを完全に知っているふりをするつもりはないので、基本的な誤解がある場合は、明確にしていただければ幸いです。
ユーザー モード アプリケーション (ドライバーに IOCTL を送信):
typedef struct {
unsigned int write;
ULONG reg_addr;
ULONG reg_val;
} reg_parameters;
...
reg_parameters regvals;
regvals.write = 0;
regvals.reg_addr = 0xDEADBEEF;
regvals.reg_val = 0XBBBBBBBB;
ULONG value;
...
DeviceIoControl(driver,(ULONG)IOCTL_OMAPCONF_REG, ®vals, sizeof(regvals),
&value, sizeof(ULONG), &size, NULL);
カーネル モード ドライバー (reg_addr でメモリを読み取り、reg_val で指定された場所に値を格納):
NTSTATUS OmapConfDrvDispatch(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp)
{
PVOID ioBuffer;
....
ioBuffer = Irp->AssociatedIrp.SystemBuffer;
....
ioBuffer
さて、質問:ドライバーから個々の構造体メンバーにアクセスするにはどうすればよいですか?
たとえば、なぜそれほど単純ではないのioBuffer.reg_addr
でしょうか?
考え?