戻る

711modem作成メモ。 ※新しいものは上に追加されます。
06-5-13
デバイスドライバ部分は完成、単なる折り返しシリアルデバイスだが。これで青画面見なくて済む〜。
確かにWDFはラクよのー。今回はデバイス2つなんで自前でロックしたけど、ロックも面倒みてくれるし。 あとはタイマStart時にコンテキストを指定できるようにしてくれ。それとも毎回作るのが推奨?ポーリング的に使うのが推奨?
さーて、ユーザモードのSIPを書きながらV.27terの資料でも集めますか。
06-4-7
雑多。 CEと違いシリアルデバイスは1回しかopenできなくていいのでWaitCommEventは簡単。 WdfRequestComplete呼ばなければSTATUS_PENDINGが返されるので 1個待つだけなら別キューに入れる必要なし。 FILE_FLAG_OVERLAPPEDつけないとRead/Write/IoCtlはシステム側で 1つにシリアライズされ、 WdfRequestCompleteされるまで次のIRPが廻ってこない。 別ハンドルの場合や同一ハンドルでもOVERLAPPEDの場合はIRPは廻ってくるが、 WdfIoQueueDispatchSequentialだとWDFによりSTATUS_PENDINGが返され、 WdfRequestComplete関数の中から次のコールバックが呼ばれる。 既存のCOMではOVERLAPPEDのタイムアウトタイマは前のWdfRequestComplete時点から開始。
とまあのんびり作っているように見えますが、 Vistaリリースと同時期に完成予定だからです。
06-4-4
ユーザモードのサービスから独自アクセスをしようと思っていたのにmodem.dll、 Namespageが\Tsp以外通過しないじゃんかょぅ、複数オープンできないし。 でsidebandデバイス、WdfPdoInitAssignRawDeviceだと PnPバルーンが表示されてしまうし削除時になぜかだめ。 デバイスインターフェース使えないけど WdfControlDeviceInitAllocateがよさげ。 コントロールデバイスってNTデバイスのwrapperかあ。
06-3-25
SONYの電話マウス買いますた。 こういうバカっぽい製品好きなんですよ。 デバイス認識はハブ(マウス、複合デバイス(オーディオ、HID))となっていて、 独自デバイスドライバは必要ありません。 マウスを軽く持ち上げた時にケーブルに引きずられて開き加減になってしまうので もう少し開きが硬いほうがいいなあ。 クリープやポインタ飛びは仕方ないにしても、 ときどきクリックを無視することがあるので 正直お勧めできません。
X-Liteはごちゃごちゃしすぎているから、 モデムに飽きたら(^^;小さなSIPクライアントでも作るか。
06-3-13
・バスGUIDがSERENUM、PCMCIA、ISAPNPだとCOM名の割り当てを行わない。 バスドライバでのインストール(toasterbus/notify)では ハードウェアIDをRoot\で始めないこと。
・バスドライバなしのインストール(devconでは駄目、超参照)は、 SetupDiCreateDeviceInfoがDICD_GENERATE_IDではCOM名を割り当てない。 が独自のデバイス名を割り付けると、削除時になぜかうまく動作しない。 結局インストーラで新規のCOMxをcomdbから割付、削除時に削除すること。
・inf右クリックのインストールは… [Setup Hooks]は全く動作しない、RegisterDllsは起動が遅い、RunOnceで。RunOnceはレジストリ登録されず特殊処理される。
・ユーザサイドのdllサービス起動はdllhostかrundll32か…svchostが無難か。rundll32は本来対話用だし。
06-2-23
・dllはsystem32内にコピーすること。
・DebugPrintClose呼ばないと、KMDFでは削除時に青画面。
・ClassInstallerとCoInstallerでは呼び出される書式が違う。stdcallなんで数違うと致命的。
・mdminst.dllの挙動が不明。最終的にはモデムコンパネだけから追加や削除をしたいが、バスドライバのインストールなしには不可能かも。
・セクション名[M2701]の時だけ接続先パラレルポートの選択になって、それ以外は接続先シリアルポートになる。選択させないようにするには要推測…無理っぽい。
06-2-10
というわけでひかり電話で使えるソフトウェアモデムでも作ってみんべー、 という計画のもと、15driverのソース引っ張り出してガワだけ実装。 WDMも久しぶりですっかり忘れているのはともかく、 DebugPrintがなぜか使えないので2003マシンで起動しているサービスを つらつらと眺めていると、
Windows User Mode Driver Framework
なる見慣れない文字が。 この実装ってLonghornからじゃ、と思って調べてみると、 ひょっとしたら2003やXPで今でも使えるのか …モデムクラスではユーザモードはサポートされてない…いきなり轟沈。 でもせっかくだからWDFベースで実装するぜ。
しかしKMDF+ATコマンド+SIP+G.711+V.21+V.27terですか…無謀にも程がありますな。(笑)