【WDM】Windows Driver Model相談室【デバドラ】
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
NGNG0879デフォルトの名無しさん
2010/02/23(火) 19:28:270880デフォルトの名無しさん
2010/02/23(火) 21:56:34単純にCreateFileするユーザーのアクセス権限で
Administrators指定して開けばいける気がする。
0881872
2010/02/24(水) 11:13:23あと CUI なプログラムなので、
(1) DOS窓開始ユーザを Administrator で実行して実行してみたり、
(2) Explorerから実行ファイル右クリックで別ユーザ→Administrator指定して実行してみたり
でも変わらずです。
Class が UNKNOWN なドライバだけどUpper や Lower がいるはずもないし・・・
うちのマシン環境が腐ってる・・・?OS入れ直ししてみた方がいいんでしょうか。
0882872
2010/02/24(水) 16:20:44CreateFile の 第1引数のパスの末尾に"\\" を追加するとうまくいきました
・・・が、そういう仕様ですか?
MSDN みてますが、第1引数 lpFileName の指定で特筆無いし・・・
本当に正しいのか良く分からないです。
0883デフォルトの名無しさん
2010/02/24(水) 19:52:08てかなんで\\を追加とかいう不可思議な発想に至ったのか
0884872
2010/02/24(水) 21:41:20Windows Vista デバイスドライバプログラミングの書籍にあるサンプルプログラムに
Detail で DevicePath を取得したあと \\hoge を追加したパスで
CreateFile してて、それだとうまくいきました。
んで、色々パスを試したら \\ を追加すれば
動くって所に(たまたま)行き着いた、ってトコです。
0885デフォルトの名無しさん
2010/02/25(木) 06:31:060887デフォルトの名無しさん
2010/02/25(木) 13:57:170888872
2010/02/25(木) 14:28:58結局今のPCの環境がおかしい・・・何が違うんだorz
OS入れなおしてみるか・・・。お騒がせ(?)しました。
0889872
2010/02/25(木) 14:42:18転載OKなんかな。
http://www.sbcr.jp/books/download/art.asp?newsid=2095
からダウンロードして展開できたソース 1-8\open_close_final\VistaSample2
をまんま使用。
どういう仕組みでメモリ破壊してるんでしょう??
0890デフォルトの名無しさん
2010/02/25(木) 14:49:330891872
2010/02/25(木) 14:54:20HANDLE CreateDevice(GUID *pGuid, CHAR* filename) {
HDEVINFO deviceInformationHandle;
SP_INTERFACE_DEVICE_DATA interfaceDeviceData;
PSP_INTERFACE_DEVICE_DETAIL_DATA interfaceDeviceDetail;
DWORD sizeOfSymbolicName;
HANDLE deviceHandle=NULL;
UCHAR devicePath[DEVICE_PATH_LENGTH];
interfaceDeviceDetail = NULL;
memset(&devicePath,0,DEVICE_PATH_LENGTH);
// GUIDからHDEVINFOを取得
deviceInformationHandle =
SetupDiGetClassDevs(pGuid,
NULL, NULL,
DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
if(deviceInformationHandle==INVALID_HANDLE_VALUE)
return NULL;
// HDEVINFOからSP_INTERFACE_DEVICE_DATAを取得
interfaceDeviceData.cbSize = sizeof(interfaceDeviceData);
SetupDiEnumDeviceInterfaces(
deviceInformationHandle,
NULL, pGuid, 0, &interfaceDeviceData);
// SP_INTERFACE_DEVICE_DATAからSP_INTERFACE_DEVICE_DETAIL_DATA取得
// その1:とりあえず長さを取得
SetupDiGetDeviceInterfaceDetail(
deviceInformationHandle,&interfaceDeviceData,
NULL, 0, &sizeOfSymbolicName, NULL);
0892872
2010/02/25(木) 14:55:21// SP_INTERFACE_DEVICE_DATAからSP_INTERFACE_DEVICE_DETAIL_DATA取得
// その2:データそのものを取得
interfaceDeviceDetail =
(PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(sizeOfSymbolicName);
interfaceDeviceDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
SetupDiGetDeviceInterfaceDetail(
deviceInformationHandle,
&interfaceDeviceData, interfaceDeviceDetail,
sizeOfSymbolicName, NULL, NULL);
// interfaceDeviceDetail->DevicePathがドライバアクセスへの
// 名前として使える。ここでは更に引数のファイル名を追加する。
strcpy((CHAR *)devicePath,
interfaceDeviceDetail->DevicePath);
printf("CreateDevice [%s] \n",(PCHAR)interfaceDeviceDetail->DevicePath);
strcat ((CHAR *)devicePath,"\\");
strcat ((CHAR *)devicePath,filename);
// デバイスドライバへのアクセス許可を求める
deviceHandle = CreateFile(
(CHAR *)devicePath,
GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_WRITE | FILE_SHARE_READ,
NULL,OPEN_EXISTING,0,NULL);
// 確保したリソースを破棄する
if (interfaceDeviceDetail)
free(interfaceDeviceDetail);
SetupDiDestroyDeviceInfoList(deviceInformationHandle);
return deviceHandle;
}
0893872
2010/02/25(木) 15:00:561-8\open_close_final\VistaSample1 が対応するドライバで、
inf の クラスとGUIDを Unknown に変更して使ってみてます。
ってそういう意味じゃない?
0894デフォルトの名無しさん
2010/02/25(木) 16:53:480895デフォルトの名無しさん
2010/02/25(木) 19:06:210896デフォルトの名無しさん
2010/02/25(木) 20:05:18アンインストールをちゃんとやらないでドライバだけいれたから
レジストリがおかしくなってるか、ドライバが実は古いままとか
そういうのはないかな。別のPCでも大丈夫なあたり。
できれば仮想環境とかですぐに元に戻せる環境を使って
最初から今のドライバでうまくいくか試したほうが速いと思う。
今の自分のドライバのGUIDに変なエントリがないか調べてみるのもあり。
あと、正直勉強不足だった。
\\つけた後にオプションとかやるんだな。
ただ列挙したデバイスインターフェイスのGUID+4桁の数字
ちなみに俺はおっさんなので、SetupDi使うのがめんどくさくて
CreateDeviceの固定された名前でどうにかしてしまうことが多い。
0897デフォルトの名無しさん
2010/02/25(木) 20:06:59消しすぎた。
デバイスインターフェイスのGUID+4桁の数字
でアクセスできるのが普通だと思うから
サンプルがそれでちゃんと動くかどうか確認してみたほうがよい
と書くつもりだった。
>SetupDiEnumDeviceInterfaces(
>deviceInformationHandle,
>NULL, pGuid, 0, &interfaceDeviceData);
0決め打ちはマズイと書いてみる。
0899デフォルトの名無しさん
2010/02/28(日) 09:37:30File Name: GRMWDK_EN_7600_1.ISO
Version: 7.1.0
Date Published: 2/26/2010
Language: English
Download Size: 619.8 MB
http://www.microsoft.com/downloads/details.aspx?FamilyID=36a2630f-5d56-43b5-b996-7633f2ec14ff&DisplayLang=en
http://download.microsoft.com/download/4/A/2/4A25C7D5-EFBE-4182-B6A9-AE6850409A78/GRMWDK_EN_7600_1.ISO
0900デフォルトの名無しさん
2010/04/20(火) 23:53:44WinUsb_ControlTransfer()使うんだ、と言うところまでは理解した……つもりなのだが、
いざ実行してみるとFALSEが返ってGetLastError()はERROR_GEN_FAILUREになる。
ReadPipeとWritePipeはうまく行ってるので、WINUSB_INTERFACE_HANDLEがとれてないという
ことは無いと思うのだけど、ドコのナニに問題があるのか全然分からない。
同じところで詰まった人、ヒントで良いんでおしえてくだちいorz
0901デフォルトの名無しさん
2010/08/07(土) 04:07:36ComPortのドライバを作っていまして、
ドライバの割り込み待ち中に、通信先のWin32アプリがフリーズする点で躓いています。
Win32アプリ(フリーのシリアル通信ソフト)からIOCTL_SERIAL_WAIT_ON_MASKという
I/O Controlコードをドライバが受け取ったとき、
ドライバはシリアル受信等の割り込みがあるまで、そこで待ち続ける必要があるようなのですが、
待っている間、Win32のアプリの方がフリーズしてしまいます。
割り込み待ちの処理には KeWaitForSingleObject を
NotificationEvent, Executive, KernelMode、タイムアウトなしで使用しています。
一般に出回っているComPortのドライバに
自作のWin32アプリからIOCTL_SERIAL_WAIT_ON_MASKを送信してみたところ、
その送信時点でWin32アプリの処理が止まり、 (DeviceIoControl関数から抜けなくなり)
ドライバがシリアルデータを受信したときにアプリは処理を開始していました。
これから、ComPortのドライバはIOCTL_SERIAL_WAIT_ON_MASKを受信した段階で
シリアルデータの受信割り込みがあるまで待ち続けることが分かるのですが、
僕の待ち方(KeWaitForSingleObject)が悪いためか、
自作のドライバではフリーのシリアル通信ソフトはフリーズしてしまうようです。
どなたか、正しい割り込み待ちの仕方をご教授いただけないでしょうか?
WDMの勉強はごく最近始めたもので、
知識不足な点が多いとは思いますが、宜しくお願いいたします。
0902デフォルトの名無しさん
2010/08/07(土) 05:30:44>ドライバはシリアル受信等の割り込みがあるまで、そこで待ち続ける必要があるようなのですが、
常識的に考えて、ソレはアリエナイ。
queueにでも突っ込んでおいて、STATUS_PENDINGを返して、
指定の状態変化が起きたらcompleteする感じで良いハズ。
0904901 ソース 1/2
2010/08/07(土) 11:51:57やはりKeWaitForSingleObjectの使い方が間違っているのでしょうか。
待ちに入った場合でもWin32アプリの方がフリーズしない方法をご存じでしたら
ぜひ教えてほしいです。
NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath)
{
//デバイス作成
NTSTATUS NtStatus1;
PDEVICE_OBJECT pDeviceObject_Port1 = NULL;
UNICODE_STRING usDriverName_Port1, usDosDeviceName_Port1;
RtlInitUnicodeString(&usDriverName_Port1, L"\\Device\\vserial1");
RtlInitUnicodeString(&usDosDeviceName_Port1, L"\\DosDevices\\COM5");
NtStatus1 = IoCreateDevice(pDriverObject, 0, &usDriverName_Port1, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &pDeviceObject_Port1);
//メジャーファンクション登録
for(int i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++)
pDriverObject->MajorFunction[i] = COM_UnSupportedFunction;
pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = COM_IoControl;
IoCreateSymbolicLink(&usDosDeviceName_Port1, &usDriverName_Port1);
return STATUS_SUCCESS;
}
---2/2へ続きます----
0905901 ソース 2/2
2010/08/07(土) 11:54:56NTSTATUS COM_IoControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
NTSTATUS NtStatus = STATUS_NOT_SUPPORTED;
KEVENT event;
PIO_STACK_LOCATION pIoStackIrp = IoGetCurrentIrpStackLocation(Irp);
// バッファポインタ取得
PCHAR pInputBuffer = (PCHAR)Irp->AssociatedIrp.SystemBuffer;
PCHAR pOutputBuffer = (PCHAR)Irp->AssociatedIrp.SystemBuffer;
// バッファサイズ取得
int InSize = pIoStackIrp->Parameters.DeviceIoControl.InputBufferLength;
int OutSize = pIoStackIrp->Parameters.DeviceIoControl.OutputBufferLength;
int dwDataRead = InSize, dwDataWritten = 0, debugstr_i = 0;
switch (pIoStackIrp->Parameters.DeviceIoControl.IoControlCode) {
case IOCTL_SERIAL_WAIT_ON_MASK:
{
//待ちに入る
KeInitializeEvent(&event, NotificationEvent, FALSE);
NtStatus = KeWaitForSingleObject(&event, UserRequest, UserMode, FALSE, NULL);
KeClearEvent(&event);
}
Irp->IoStatus.Information = dwDataWritten;
Irp->IoStatus.Status = NtStatus;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return NtStatus;
}
簡略化しましたがこれが全貌です。
以上、お時間のある方いらっしゃいましたらお相手していただけると嬉しいです。
0906901
2010/08/08(日) 01:04:22KeWaitForSingleObjectでタイムアウトを設定し、
STATUS_PENDINGを返すようにしました。
しかし、自作のWin32アプリからドライバへ、DeviceIoControl関数により
IOCTL_SERIAL_WAIT_ON_MASKを送信してみたところ、
すぐにDeviceIoControl関数から抜けて次の処理を行ってしまい、
一般に出回っているComPortのドライバと同じふるまい(DeviceIoControl関数から抜けなくなる)
をさせることができませんでした。
0907デフォルトの名無しさん
2010/08/08(日) 04:13:26他のシリアルドライバとの違いなのか、
シリアルドライバとして正しい振る舞いがわからないのか。
手っ取り早いのはMS標準シリアルドライバでどう動くのか確認して、同じように実装すること。
挙動を見る限り、その比較対象のドライバはPENDING抜けしてないでしょ。
フリーズする/しないはアプリ側の作りの違いだと思うから、そこは気にしなくてもよさそうじゃね?
0908デフォルトの名無しさん
2010/08/08(日) 19:32:35KeWaitForで固まるのが困るときはタイムアウト設定したり
スレッド別に用意したりすると思うが、別にドライバに限った話じゃないし
話を聞いた感じだと、
アプリ側でスレッドつくるべきなんじゃないかと思うけどね。
0909デフォルトの名無しさん
2010/08/09(月) 21:14:21ドライバと通信を行うWin32アプリは、一般に出回っているシリアル通信ソフトを考えています。
また、参考にしていたシリアルドライバはMS標準のものです。
整理しますと、自作のシリアルドライバとMS標準のものでは次の違いが発生しています。
自作のシリアルドライバとシリアル通信ソフト(Win32アプリ)での挙動:
Win32アプリからドライバへ、DeviceIoControl関数でシリアルデータ受信割り込み待ち命令を送信すると
アプリ側の処理がそこから先に進まないうえ、
Win32アプリ(のGUI)がフリーズする
MS標準のシリアルドライバとシリアル通信ソフト(Win32アプリ)での挙動:
Win32アプリからドライバへ、DeviceIoControl関数でシリアルデータ受信割り込み待ち命令を送信すると
アプリ側の処理がそこから先に進まなくなるにも関わらず、
Win32アプリ(のGUI)はフリーズしない
これらから、MS標準のシリアルドライバと同じ挙動をさせるには
Win32アプリをDeviceIoControl関数から抜けなくさせ、
なおかつアプリのGUIが固まらないようにしなければならないと解釈しています。
どなたかお時間のある方いらっしゃいましたら
ヒントを頂けると嬉しいです。
0910デフォルトの名無しさん
2010/08/10(火) 04:02:52アプリがフリーズしているように見えるかどうかはWindowsから送られてくる
メッセージ処理をしているかどうかで決まる。
だからDeviceIoControlで止まっていたらアプリは必ずフリーズする。
だから>>908のように、「固まって困る場合=メッセージ処理したい場合」として
スレッドやタイムアウトをするべきであると書いた。
よって、MS標準のドライバの場合はOKで、
自作のはフリーズするというのは理にかなっていない。
もう一度アプリ側の調査をよくよくやってみることをおすすめする。
0911デフォルトの名無しさん
2010/08/10(火) 14:50:45受信通知条件が違っているとその辺の処理の扱いが変わってくるからな。
0912デフォルトの名無しさん
2010/10/06(水) 20:08:19方法ってありますか。
解像度の変更が出来ないソフトがあって困ってます。
0913デフォルトの名無しさん
2010/10/07(木) 10:14:42特定ソフトだけの問題ならアプリ側のアクセスをどうにかするほうが楽そう
0914デフォルトの名無しさん
2010/10/21(木) 20:54:35非PnPなのでDPInstは諦めてdevconのソースを流用しているんだが、
これだとデバイスを削除した後にドライバ・パッケージがシステム内に残ったままになる
(devconのremoveコマンドとdp_deleteコマンドの中身を組み合わせてる)
誰か、ドライバ・パッケージまで削除できる良い方法を知らない?
DIFxAPIと組み合わせれば何とかなるのかな?
0915デフォルトの名無しさん
2010/10/23(土) 00:02:11・\RootのなんとかにするとDPInstでもインストールできなかったっけ?
と思ってToasterみてたらよくわからんGUIDだった。
とにかく、Inf/Inxをちゃんと書けばDPInstが使えると思う
・どうしても無理ならDIFxなんとかを改造すれば使える
DPInstのコアAPIなのでこっちならパッケージのインストール、アンインストールができるはず。
多分DIFxPkgsあたりだろうけど、できるかどうかはわからん。
0916sage
2010/10/27(水) 18:12:47自己レス
DIFxLIB(DIFxAPI)と組み合わせるたら、Windows XPでそこそこいい感じになった
インストール:
・デバイスを手動で登録する(非PnPなので)
devconのcmdInstall()のソースを移植、但しcmdUpdate()の呼び出しは削除
※既にデバイスが存在する場合は、この処理はスルーすること
・で、DriverPackageInstall()でドライバをインストール
アンインストール:
・デバイスを削除する。devconのcmdRemove()とRemoveCallback()あたりを参照
あとEnumerateDevices()あたりも
・で、DriverPackageUninstall()でドライバを削除。
Windows XPだとDriverPackageUninstall()がそこそこいい感じにファイルを削除してくれる
C:\Windows\System32\drivers以下にコピーされたファイルも削除してくれる
(Windows 7以降では削除されないけど、DriverPackageUninstall()の仕様なので)
ただ新しいドライバに更新した後にアンインストールすると、
ドライバ・ストアから最新のドライバ・パッケージは削除されるけど、
古い世代のドライバ・パッケージは全バージョン残ったままになってしまう
DIFxAPIの仕様なんだろうか?
0917デフォルトの名無しさん
2010/10/27(水) 21:02:04それはDPInstもそうなってるので、仕様だと思う。
DPInstでインストールするとドライバの日付やバージョンで管理するらしく
複数残ったままになる。ただ、アプリケーションの追加と削除に項目として残るので
普通に全部アンインストールすれば問題ない。
0918デフォルトの名無しさん
2010/12/12(日) 19:39:33windows7上で、magicmouseを動かしたいんで、
ドライバを、書いてくれっ!
現状だと、スワイプが使えないんだ!
0919デフォルトの名無しさん
2010/12/12(日) 23:17:360920デフォルトの名無しさん
2010/12/12(日) 23:19:54すまない、
誘導してくれないか。
0921デフォルトの名無しさん
2010/12/13(月) 10:49:51http://hibari.2ch.net/test/read.cgi/software/127868739
この辺か?
0922デフォルトの名無しさん
2010/12/13(月) 18:22:15>windows7上で、magicmouseを動かしたいんで、
ドライバ署名の問題もあるから自分で書けばいいじゃんw。
0923デフォルトの名無しさん
2011/01/28(金) 22:05:12とあるアプリケーションの音を、劣化なしに録音したいのですが、
録音デバイスはマイクとライン入力程度で、まともな手段で録音出来ません。
とりあえず、ollydbgで見てみたら、waveOutWriteは呼ばれず、DSoundから
直接DeviceIOControlが呼ばれており、DirectX系から、ハードウェアが
直接制御されているようです。あと、WriteFileはコールされていませんでした。
ここで、DeviceIOControl 関数の引数inBuffをじゃっかん弄っても、音に変化が
なさそう(?)でした。この関数でバッファ転送してると思ってたので、行き詰まって
しまいました。
なんか勘違いとかしてるんでしょうか?
もしくは、上記の目的のために、別の手段はありませんでしょうか?
0924デフォルトの名無しさん
2011/01/28(金) 22:12:290925デフォルトの名無しさん
2011/01/28(金) 23:10:07大抵は、サウンドチップの製造元のドライバ入れれば、
ステレオミキサーから録音できるようになる。
0926デフォルトの名無しさん
2011/01/28(金) 23:56:410927923
2011/01/29(土) 00:00:14COMで実装されてるぽい(たぶん)ので、上手いことフック出来ません。
そもそもCOMもDirectSound詳しくないのですが、COMあたりから
攻めた方が賢いでしょうか?
>>925
そうなんですか!ちょい調べてみます。
納入先にそれを要求するのは厳しいかもしれませんが、検討してみます。
0929デフォルトの名無しさん
2011/01/29(土) 00:28:410930デフォルトの名無しさん
2011/01/29(土) 00:46:180931923
2011/01/29(土) 01:19:39>>930
説明不足ですいません。
このスレの趣旨に基づき、質問を絞ります。
- とあるソフトが発する音を横取りするのが最終目的。win全体の音でも構わない
- フックする場所は、ユーザーモードであればどこまでも構わない。
- 目的のために、ハードウェア導入、もしくはハードウェア依存のドライバ導入など、ハードウェアに関する作業は極力避けたい
- そのソフトをollydbgで覗くと、DSOUNDからDeviceIOCOntrolが頻繁にコールされており、恐らくDirectX系が使われている
現状
- ollydbgにて、DeviceIOControlの引数inBufferをちょくちょく弄っても正常に音が鳴っている「ぽい」し、WriteFileもコールされてないので、詰まった
質問
- 上記の目的は、DeviceIOControlのフックにより達成できるか?出来るのであれば、どういう手法、攻め方をすればいいか
- そもそも、何か大きな勘違いをしていないか
waveOut系で音を鳴らすアプリケーションであれば、恐らくなんとかフック・横取りできる程度のスキルは
あるつもりなんですが、DeviceIOControl とか、低級な制御には余り詳しくなく、また適切なスレも無いために、
このスレでさせて頂いた次第です。
どうぞよろしく願いします。
0932デフォルトの名無しさん
2011/01/29(土) 01:22:380934923
2011/01/29(土) 12:45:52>>933
Unlock関数のフックで、スタックからwaveが引き抜けそうです。
COMの解析は初めてでしたが、思ったより簡単で助かりました。
ありがとうございました。
0935デフォルトの名無しさん
2011/02/04(金) 20:35:45KeyboardClassServiceCallback内でZwOpenFile使うとブルースクリーンになってしまうだよな。。
kbdclass内じゃファイルアクセス処理は使えないんけ?
(フィルタドライバ内では使えてたんだけど。。)
0936デフォルトの名無しさん
2011/02/04(金) 20:37:210937935
2011/02/04(金) 21:19:40わかってる。
お手軽にキー入れ替えをやってみたくてね。
ファイルにキー入れ替え情報を設定して、それを読み込んで反映できないかなって。。
(KeyboardClassServiceCallback内って書いたけど、これじゃキーが押されるたびに
ファイルアクセスしてしまうから、ドライバ起動時にやるべきか。もちろん出来ればの話だけど)
0938デフォルトの名無しさん
2011/02/04(金) 22:08:08IRQLと、そのそれぞれのレベルで使える関数の制限について勉強してね
設定を読み出すなら、ふつーにレジストリ経由が無難。
0940935
2011/02/05(土) 02:47:20確かにZwOpenFileはIRQLがPASSIVE_LEVELのときのみ使用可能って書いてあるね。。。
DriverEntry内ではIRQLがPASSIVE_LEVELだったので、ファイルの情報を
DriverEntryで取得して内部変数で保持する方法で今回は逃げてみるよ。
とりあえず今自分のやりたいことは出来そうだけど、こりゃ本腰いれて勉強しないと
難しいね。
参考書買って勉強してきま
>>938
>>939
感謝!
0941デフォルトの名無しさん
2011/03/05(土) 02:30:07.47moufltrを書き換えて使えばいいんですかね?
単純なフィルタ機能だけじゃなくボタンを押してない時にボタンを押したりするのを
アプリからの制御でやろうかと思いまして
moufltrはたぶんPS/2用のフィルタになるんだと思うんですが
hidとは違うフォルダにあるんで勝手にそう思ってるだけなんだけども
USBにもこれは適用出来るんですか?
0942941
2011/03/05(土) 13:55:54.31ドライバ更新でインストールしてアッパーフィルタにmoufiltrが出てるんだけど
DebugViewには何のメッセージも出てきません
どこから手をつけていいかも分からない状態なんで
とりあえず動くものを手にいれたいんですがどうしたらいいんでしょう?
0944デフォルトの名無しさん
2011/03/05(土) 17:15:44.380945デフォルトの名無しさん
2011/03/05(土) 18:39:00.61SetCursorPos(...)やPostMessage(...,WM_LBUTTONxxxx,...)で出来そうに思うが・・・
0946デフォルトの名無しさん
2011/03/05(土) 19:16:20.210947デフォルトの名無しさん
2011/03/05(土) 19:42:58.48入力の生成の部分のことですか?
何か動くものがほしくてmouclassもVMWare上のXP SP3に入れてみて
WPFも解除してデバイス表示で上書き出来てるのは確認しましたが
やっぱりDebugViewにはそれらしいメッセージは出てきません
>>944
VM上ではACIPI\PNP0F13だからPS/2だと思うんですが動いてないから違うんですかね
>>945
今はテスト用にVM上のXPにドライバを入れてますが
普段はVM上で別のOSやアプリを動かしててホストからコントロールするわけですが
なぜかVMはプログラムで生成された入力情報は完全に遮断してしまってるんで
VMの中身が操作出来ないんです
それにドライバの作り方にも興味があるんであえてやってみようかと
checked build
0949デフォルトの名無しさん
2011/03/06(日) 19:16:46.56Inf2catがうまく通らない rramdisk.infをどう修正すればいいやら・・・・
0950デフォルトの名無しさん
2011/03/10(木) 21:42:54.63CatalogFile=toaster.cat
これがあると勝手にやってくれたような記憶があるんだが。
0951デフォルトの名無しさん
2011/03/14(月) 20:33:47.880952デフォルトの名無しさん
2011/03/25(金) 08:47:27.84IOCTLのコードを追加してInputデータを与えようとしてて
サンプルは動くところまで確認して
独自のIOCTLコードを発行しても反応がない
たぶんこの行でインプットがあるせいではじかれてるのかと思い削除してみると
UNREFERENCED_PARAMETER(InputBufferLength);
コールバック関数定義の部分
KbFilter_EvtIoDeviceControlFromRawPdo(
IN WDFQUEUE Queue,
IN WDFREQUEST Request,
IN size_t OutputBufferLength,
IN size_t InputBufferLength, *
の一番したの行でc2220エラーが出てコンパイルが通りません
何のことですかね?
C++は熟知してるけど、まるで違う言語を扱ってるくらい動作が違う
0953デフォルトの名無しさん
2011/03/25(金) 09:49:47.02パラメーターを受け取るとこまで出来た
なんじゃこりゃ
0954デフォルトの名無しさん
2011/03/25(金) 14:26:09.93嘘だ。
0955デフォルトの名無しさん
2011/03/25(金) 16:52:49.26次に同じ要領でマウスドライバも作ってますがrawpdoをkbfiltrからコピペしてみて
コンパイルしてインストールしたけどIOCTL用のデバイス名が出てこない
そもそもドライバが動いてなさそうなんですが
問題はEvtDeviceAddで何か失敗してるんだろうけど
マウスドライバは起動時に読み込まれるからDebugViewでメッセージが取れない
起動時のメッセージを見る方法ってどうすればいいんですか?
0956デフォルトの名無しさん
2011/03/25(金) 17:58:57.120957デフォルトの名無しさん
2011/03/25(金) 20:43:20.67他の部分がバグってるっぽいですが
それも問題になるんですか?
0958デフォルトの名無しさん
2011/03/25(金) 20:48:48.91ちゃんとコールバックされてますね
0959デフォルトの名無しさん
2011/03/25(金) 21:04:26.32いずれにしても起動時のデバッグメッセージが拾えるともっと早く解決したんですけどね
0961デフォルトの名無しさん
2011/03/26(土) 00:07:39.88話になんねー
0962デフォルトの名無しさん
2011/03/26(土) 00:17:43.880963デフォルトの名無しさん
2011/03/26(土) 04:18:08.15他の人が、何がひどいかをあえて説明すると
PCもう一台用意して、WinDbgをインストールし
シリアルか1394でリモートデバッグの設定をすれば
起動時からデバッグメッセージ拾える。
あとC++熟知しているなら、
UNREFERENCED_PARAMETERのマクロが何やってるかぐらいは確認すべき。
0964デフォルトの名無しさん
2011/03/26(土) 04:18:51.880965デフォルトの名無しさん
2011/03/26(土) 06:52:08.35情報をありがとうございます。
2台は用意出来ないんですが
それって仮想シリアルポートドライバみたいなのが必要ってことですか?
0966デフォルトの名無しさん
2011/03/26(土) 07:13:27.08ずいぶん前に数度試しただけだから詳細は覚えてないが
VMWareだと仮想PC上の仮想シリアルがパイプになっているので
WinDbg側からはパイプに接続すればよかった。
と思ったがVMWareじゃなくてVirtualPCだったかもしれん。
仮想PCを起動するとパイプが作られるのでそれをWinDbgで開く
みたいな感じだった
先にWinDbgでひらいておこうとするとパイプがないと怒られたはず。
自分はHW固有のドライバ作ってたので
その環境は作ってはみたものの使い道なくてあまり使わなかった。
0967デフォルトの名無しさん
2011/03/26(土) 09:02:16.23パイプですか、よく分かりませんがキーワードで調べれば出てきそうですね。
貴重な情報をありがとうございます。
0968デフォルトの名無しさん
2011/03/29(火) 13:54:19.16ReportDescritorを返すところまでは呼ばれてて
その後びっくりマークになって正常に起動出来ませんでしたとかになる
他のコールバックは呼ばれてる様子もないしDescriptorの問題なんだろうけど
どっかに動くキーボード用のDescriptorってありますか?
とりあえず検索して出てきたのとHut1.1に載ってるサンプルは試したけど駄目でした
0969デフォルトの名無しさん
2011/03/29(火) 14:43:33.510970デフォルトの名無しさん
2011/03/29(火) 15:48:07.14ホストがWin7 64でVMWareがあるけどPs/2だから
対応してるツールがないんです
それとちょっとだけ進展が
キーボードはブートデバイスだから
ブートデバイスIDを指定してやったら認識はしましたが
なぜか8個もキーボードが出てきてしまいました
0971デフォルトの名無しさん
2011/03/29(火) 21:33:22.00マウスとキーボードを動かそうとしてるんですが
マウスを動かすのに7byteのデータ
ReportID, Button, X, Y, WheelをIOCTL_HID_READ_REPORTで渡すとマウスが動く
これは確認しました
でキーボードを9byte
ReportID, Modifier, Reversed, Code[6]を同じように発行すると反応なし
何が間違ってるんでしょう?
0972デフォルトの名無しさん
2011/03/30(水) 08:57:09.17おかげさまでキーボードとマウスの仮想USBドライバが完成しました
0973デフォルトの名無しさん
2011/03/31(木) 19:10:30.77解決方法はありますか?
0974デフォルトの名無しさん
2011/03/31(木) 19:27:29.86関数が定義されていない
急に出た理由までは知らんw
0975デフォルトの名無しさん
2011/03/31(木) 20:05:36.97精度は適当でいいんですが
0976デフォルトの名無しさん
2011/03/31(木) 20:14:20.97わかりました
0977デフォルトの名無しさん
2011/04/02(土) 22:02:10.86cdecl呼び出しにしてもリンクエラーが出てしまいます。
関数の定義はint func(PSTRUCT st)といった単純なものです。
外部のAPIを一切使わないようにして完全に単体で動くようにしてます。
何か呼び出し規約が特別なものなんでしょうか?
0978デフォルトの名無しさん
2011/04/02(土) 22:32:56.01レス数が950を超えています。1000を超えると書き込みができなくなります。