VC++6.0でRequestDeviceWakeupというパワーマネジメント系の関数を使うにはどうしたらいいのかご存知の方いませんでしょうか。WindowsMeを使っていてVC++6.0のWinAPIにDeviceWakeupLatencyというものは使えるようなのですが、RequestDeviceWakeupという関数が使えません。サポートしていないということなのでしょうか。MSDNを見てみましたがよく分からないので投稿しました。
過去ログに同じような記事がありましたので試してみました。LoadLibraryとGetProcAddressを使ってうまく取得できました。
RequestDeviceWakeup関数がHANDLE hDeviceを引数に持っているのですがデバイスのハンドルというものが理解できません
hdcとは違うと思うのですが取得する方法等ご存知の方いましたら宜しくお願いします。
いや、だから「デバイスのハンドル」です。
「デバイス」を特定したうえで CreateFile で開いた「ハンドル」です。
SetupDiなんちゃら を見てみましょう。
って何のために RequestDeviceWakeup を自分で使うのだろう?
そんなの Windows に任せりゃいい話だと思うが
どうしても解決できずに困っていますが、CreateFile、SetupDi関係の関数を使えばいいことは分かりました。
SetupDiGetDeviceRegistryPropertyでデバイス名だと思うのですが取得できることは出来たのですが、
CreateFileのlpFileNameに渡す名前を取得出来ません。シンボリックリンクとなる一意の名前が必要見たいです
取得するには、RtlInitUnicodeString、DefineDosDevice(かQueryDosDevice)で得られることが分かりました。
QueryDosDeviceでためしにQueryDosDevice(NULL, DeviceNames, 3000);として実行しましたがDeviceNamesがMessageBoxで見ると空になっています。
RtlInitUnicodeStringはユーザモードのWin32Appからは使えないみたいなようなのですが解決できません。OSはWinMeです。
アドバイス等ありましたら宜しくお願いします。
更にアドバイスしてもいいんですけど、そもそも根底の話として
ユーザプログラムから RequestDeviceWakeup を使う必然が一切見えないのでパス1
# 俺んちで QueryDosDevice に NULL を渡したら 7379byte 必要だったけど
# 3000 では不足だと思う
有難うございます。解決したい問題があり、スタンバイをかけ復帰した後に作成したアプリケーションを起動したときに
DirectDrawでのビデオメモリへのアクセス速度が半分に落ちてしまうことです。
ホームページで見てみましたら少し難しいのですがスタンバイなどでクロック低下のような処理をしていると書かれていたので
おそらくパワーマネジメント系の関数を使ってデバイスのWakeUpをかければ解決できるのではと思い
RequestDeviceWakeupが使えないのではと思いました。
ご指摘のとおり、QueryDosDeviceにNULLを渡して10000,20000バイトとして見ましたが同じ結果になりました。
私の環境では使えないということなのでしょうか。宜しくお願いします。
RequestDeviceWakeup は「デバイスの Wakeup 」ではないから意味なし。
MSDN ちゃんと読んだ?
「そのデバイスによるシステムの OnNow を有効にする」んだよ
デバイスマネージャで一部のデバイスだけに有る「電源の管理」の
「このデバイスで、コンピュータのスタンバイ状態を解除できるようにする」
のための関数なんだけど。
なんか問題解決のための対策としては限りなくあさっての方角を向いてる気がする。
そーいう異常動作はビデオカードのドライバやBIOS更新で直ったりしないかい?
ホームページで検索などをかけてみたのですが問題を解決できそうな記事が見つかりません。
tetrapodさんのご指摘どうりどういった関数で処理可能なのか教えていただけないでしょうか。宜しくお願いします。
tetrapodさんは、
>なんか問題解決のための対策としては限りなくあさっての方角を向いてる気がする。
>そーいう異常動作はビデオカードのドライバやBIOS更新で直ったりしないかい?
と言われていますから、
>tetrapodさんのご指摘どうりどういった関数で処理可能なのか教えていただけないでしょうか。
って言うのは話が噛み合っていない気がします。
ビデオカードのドライバの線とかマーザーボードのBIOSの更新とか
その線での調査はやって見たんでしょうか?
ビデオカードやマザーボードのBIOS更新等はまだしておらずドライバの更新等は行わず別の方法を使いたいと思っています。
QueryDosDevice関数はインターネット上でいろいろ調べたところWindows95,98で使えないのではないかと
いうことが書いてあり私のマシンではWindowsMeなのですがこれも使えないようです。
WindowsXPでは使えました。
取得したいデバイスのシンボリックリンク名はWindowsMeのディスプレイアダプタのRAGE MOBILITY-M1
AGP(日本語)というデバイスなのですが、これはVC++のコードでDeviceDescとして取得できました。
レジストリエディタで見るとHKEY_LOCAL_MACHINE->Enum->PCIに登録されているのが分かったのですが、
WinMeでこれに関連ずけられたシンボリックリンク名は取得することが出来るのでしょうか?
何か取得する方法等ありましたら宜しくお願いします。
いやだから RequestDeviceWakeup で修正されるという確信があるの?
俺は「直らない」って思う。根拠も既に書いた通り。
胃がんかどうか調べるのに脳CT撮ってもまず役にはたたんだろうね。
後は自分で調べておくんなまし。
いろいろすみませんでした。もう少し自分で整理して解決できるかどうか判断してから投稿したいと思います。
どうも有り難うございました。
問題解決したみたいです。
RequestDeviceWakeupは今回の問題には関係がなかったようです。いろいろ有難うございました。
ツイート | ![]() |