質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1752閲覧

DeviceIoControl()についてです.

void_390duke

総合スコア7

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2020/08/05 10:13

前提・実現したいこと

仮想のゲームパッドを作りたいと思っているのですが, DeviceIoControl()が何をしているのかあまり認識しておらず, 調べてもわからなかったのでどうなっているのか教えてくださるとありがたいです. CreateFileでハンドルを取得して引数にするということなどはわかりますが, この関数がそれをどのように用いて何をするのか知りたいです.

該当のソースコード

https://github.com/shauleiz/vXboxInterface
現在は, 調べている中で見つけたこちらのプロジェクトを参考に, 作っていますが, このプログラム内でどのように動いているのかはわからなくもないですが, 問題は, 最終的にどのように入力を送っているのかわからないということです.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

DeviceIoControlはその制御の対象としているデバイスに依存したコマンドなどをデバイスドライバーを介して送る為に使います。CreateFileでオープンしたファイルハンドル(デバイスのハンドル)を用いてReadFileWriteFileであらかじめデバイスドライバーで用意された汎用の読み書き操作を行いますが、それらの範疇に入らない特有の操作をDeviceIoControlで行います。

ですので、何をやっているかといえばほとんどそのデバイス(ハードウェア仕様など)に依存します。それが仮想デバイスであればその仮想デバイスがDeviceIoControlを介して送られたコマンドで何を行うか仮想デバイスに委ねられている(=つまり仕様)と言うわけで、そのコードを読まないと分からないと言うことになります。

投稿2020/08/05 10:26

dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

void_390duke

2020/08/05 10:31

回答ありがとうございます. Fileを操作して私たちが行いたいことについて, 汎用の形に合わせて書き込んだりしたりして, DeviceIoControlが, それをコンピュータ側にうまく合わせて仲介してくれるというとらえ方で問題ないでしょうか.
dodox86

2020/08/05 10:31

先のご質問[仮想の物理入力のようなものを作りたいです...]https://teratail.com/questions/282558 の続きなのだと思いますが、アプローチは全く異なるものの、Arduinoなどを使って外部制御できるようHIDキーボードデバイスを自作するような方法もあります。そうであればPCからは見た目、普通のHIDキーボードです。そちらの方がトラブルも少なく、確実な場合もあります。
void_390duke

2020/08/05 10:36

返信ありがとうございます. 私はプログラムが自発的にキーを入力するような状態にしたいのですが, その場合, プログラム->Arduino->対象というようなことは可能なのでしょうか?
dodox86

2020/08/05 10:36

> DeviceIoControlが, それをコンピュータ側にうまく合わせて仲介してくれるというとらえ方で問題ないでしょうか. ちょっと違う、と言うか足りないです。DeviceIoControlは単なるAPIで、デバイスドライバーへの橋渡し役でしかありません。DeiceIoControlで渡された各種コマンドをコンピュータにうまく合わせて動かすのは、ソフトであるデバイスドライバーです。仮想デバイスもデバイスドライバーが担当し、さもその デバイスが存在するかのように振舞っています。位置づけとしてはReadFile, WriteFileらのAPIもそうで、それぞれのエントリーポイントがあります。
dodox86

2020/08/05 10:43

> 私はプログラムが自発的にキーを入力するような状態にしたいのですが, その場合, プログラム->Arduino->対象というようなことは可能なのでしょうか? ざっくり言えば可能です。私がちょっと話を広げ過ぎたかもしれませんが、Arduino(だけではないです。色々あります)をWi-FiやBluetoothなどで通信可能にし、外部から制御できるようにして、 Arduinoに繋がっているUSBを介してHIDキーボードとしてふるまう、という形態です。電子工作とかちょっと違う話にもなってきますが、人間がするゲームをプログラムで自動制御するためのひとつの方法として考えてみると面白いかな、程度の提案です。
void_390duke

2020/08/05 11:52

返信ありがとうございます. Arduinoについては以前興味があって買おうかとも考えていましたが, 金銭面で少し厳しかったので持っていません. この機会に買ってもよいのですが, いつかプログラム同士で戦わせたりもしてみたいので, なるべく仮想のものがよいのかなとも考えています. なるほど, デバイスドライバがそのあたりはやってくれるということなのですね!ではやはり仮想のコントローラーの作り方をもっと考えたほうがよさそうですね...もう少し調べてみようかと思いますが, 何か良いヒントがありましたら是非教えてほしいです....
dodox86

2020/08/05 12:10

あとは特にご提供できるヒントは無いですね。今ある仮想のコントローラーなりデバイスドライバーなりを読み解けるようになるか、自分で何かしら改造や新規で造ってみるしかない気がします。実のところ、人から聞いただけではなかなかピンと来ない部分も多いのではないかと思っています。
void_390duke

2020/08/05 12:39

わかりました!頑張って解読してみます. 習うより慣れろは大事ですよね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問