X



Win32API質問箱 Build123©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net
垢版 |
2016/10/08(土) 12:33:02.29ID:0jaJMPXG
Win32APIについての質問はこちらへどうぞ。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
 英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

■過去スレ
Win32API質問箱 Build122
http://echo.2ch.net/test/read.cgi/tech/1451988219/
0241デフォルトの名無しさん
垢版 |
2016/12/02(金) 11:48:56.99ID:2Jj/uLxs
だから再現できるサンプルをサクッと上げろよ。
だれも実物や社外ライブラリまで上げろといってないんだわ。
コーディングやデバッグ能力以外の能力が大きく欠如してるだろ。
0242185
垢版 |
2016/12/02(金) 11:58:27.27ID:H1x5ETqP
10回やってみました。
つまり、>>226のコードでAとBだけでなく、AからJまでやってみました。

A
timeGetTime()による時間:7msec
カーネルモード時間:1092usec
ユーザモード時間:14133usec
B
timeGetTime()による時間:7msec
カーネルモード時間:249usec
ユーザモード時間:343usec
C
timeGetTime()による時間:7msec
カーネルモード時間:936usec
ユーザモード時間:9141usec
D
timeGetTime()による時間:7msec
カーネルモード時間:1372usec
ユーザモード時間:4180usec
E
timeGetTime()による時間:7msec
カーネルモード時間:561usec
ユーザモード時間:6583usec
F
timeGetTime()による時間:7msec
カーネルモード時間:717usec
ユーザモード時間:7737usec
G
timeGetTime()による時間:7msec
カーネルモード時間:468usec
ユーザモード時間:4773usec
0243185
垢版 |
2016/12/02(金) 11:58:51.26ID:H1x5ETqP
H
timeGetTime()による時間:7msec
カーネルモード時間:655usec
ユーザモード時間:9672usec
I
timeGetTime()による時間:7msec
カーネルモード時間:218usec
ユーザモード時間:4149usec
J
timeGetTime()による時間:7msec
カーネルモード時間:405usec
ユーザモード時間:10795usec
全体(A〜J)
timeGetTime()による時間:74msec
カーネルモード時間:6645usec
ユーザモード時間:71510usec
0245185
垢版 |
2016/12/02(金) 13:02:57.14ID:H1x5ETqP
本件、私としては以下の結論に至りました。

○timeGetTime()は信頼できる。
○GetThreadTime()は信用できない
 (ティック間切り上げ的な傾向あり。理由不明。)。
○timeGetTime()を基準に>>212のような方法をとるほかない。

もう一度GetThreadTime()はどうしても信用ならず、
他に有用な代替手段もないため、
>>212の方法が限界である旨を報告することにします。

何人かの真剣に助言して下さった方々、
本当にありがとうございました。
0247デフォルトの名無しさん
垢版 |
2016/12/02(金) 14:04:58.11ID:ELslSS33
timeGetTimeやめてQueryPerformanceCounterを使ったら?
0250デフォルトの名無しさん
垢版 |
2016/12/02(金) 14:21:54.01ID:ELslSS33
静的領域に書き込みすると、コピーオンライトが発生し、
動的領域を確保すると、最初とおよび足りない時はOSで確保と初期化があると思う
それが1回目が遅い理由な気がする
0251デフォルトの名無しさん
垢版 |
2016/12/02(金) 14:30:05.73ID:LG3SGwVv
質問者はアレだが
それはそうと、どうでも良いことをいうのはやめたほうが良いだろう
実時間とスレッド時間が食い違うって話だから
1回目が遅いとかそういう話ではない
0252デフォルトの名無しさん
垢版 |
2016/12/02(金) 17:49:56.46ID:EDk65fqO
結局>>237すら教えてあげなかったんだな。
0253デフォルトの名無しさん
垢版 |
2016/12/02(金) 18:15:57.54ID:2Jj/uLxs
質問者のアプローチや解釈が正しいのかが分からないのに、憶測で質問者回答者とも上から目線で
やりあってる状況にまず疑問を抱いた方がいい。
そしてそれら以下の書き込みしかできないID:EDk65fqOはクソ中のクソだと認識した方がいい。
0254デフォルトの名無しさん
垢版 |
2016/12/02(金) 22:19:54.42ID:rH7Be8WN
最初からGetThreadTimesは約1/64秒の精度しか無いって分かっていたはずなのにね。
平均とっても意味がないってことが改めて分かったことだけが成果か。
0256デフォルトの名無しさん
垢版 |
2016/12/03(土) 10:51:33.05ID:YdYTZThj
OSがどうやってカーネルモードやユーザーモードの時間を計測しているのか想像できないのかねえ
オーバーヘッドが高いやり方は採用できないと分かりそうなもんだが
0257デフォルトの名無しさん
垢版 |
2016/12/03(土) 11:08:29.93ID:JHScEEfz
触発されてGetThreadTimes=NtQueryInformationThread調べたんだけど”スレッド”の中身が興味深かった
質問者糞だから詳細は書かないがw
0258デフォルトの名無しさん
垢版 |
2016/12/03(土) 20:00:37.46ID:6jC0i+kE
俺もほんとはGetThreadTimesの特性知ってるけど、
質問者が土下座しないと教えてやらねぇw
0263デフォルトの名無しさん
垢版 |
2016/12/04(日) 12:08:20.93ID:HYzaL+1F
昔、レジストリから認識してるポート名を取得するサンプルあったな。
MSDNだったかな
0265261
垢版 |
2016/12/04(日) 16:50:15.73ID:8oIVw/6i
>>262
>>263
ありがとうございました!
0266デフォルトの名無しさん
垢版 |
2016/12/09(金) 00:46:48.41ID:WzSsU1Dc
WM_CHARでWPARAMに入ってくるコード一覧どっかない?
普通のキーならそのままだが、Back SpaceとかCtrl+Vとかのコードが知りたい。
0267片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/12/09(金) 01:04:26.73ID:IirsZJ4E
>>266
キーが押されてるかどうかの確認は、WM_KEYDOWNを使う。
「仮想キーコード一覧」で検索。
ただし、Ctrl,Shift,Altはmodifiersと呼ばれ、特別扱い。CtrlとShiftは
GetKeyState(VK_SHIFT) < 0
GetKeyState(VK_CONTROL) < 0
で確認でき、AltはWM_NCKEYDOWNで確認できる。
0268片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/12/09(金) 01:07:15.74ID:IirsZJ4E
訂正。
× AltはWM_NCKEYDOWNで確認できる。
○ AltはWM_SYSKEYDOWNで確認できる。
0269デフォルトの名無しさん
垢版 |
2016/12/12(月) 20:09:14.26ID:UWkfYPy/
プログラム実行中のログテキストをエディットコントロールに出力しようと思ったのですが、
32KB制限があり実用できないことが分かりました。

リッチエディットではそのような制限はないようなので、
特に問題なければこれでいこうかと考えているのですが、
他に良い方法があればご教示ください。
0272269
垢版 |
2016/12/12(月) 20:41:35.46ID:UWkfYPy/
>>270
ありがとうございます。
今回は検索機能とかも付けたいので、エディット系コントロールを利用することにします。

>>271
ありがとうございます。
これで通常のエディットコントロールで32KB以上を扱えます。
助かりました!
0274269
垢版 |
2016/12/13(火) 21:50:24.46ID:EhPW3kvE
>>273
リッチエディットで実装を進めていて、あとは検索機能だけ、というところまで作れたんですが、
まさかリッチエディット自体に検索機能があったとは・・・!
ここでお聞きしてよかったです。
ありがとうございました!
0275デフォルトの名無しさん
垢版 |
2016/12/19(月) 05:43:50.59ID:qsdLnaaR
paint.netのツールウィンドウみたいなやつってどうやって表示するの?
ウィンドウスタイルを色々試してみたけどあれと同じようなウィンドウが出ない。
0277デフォルトの名無しさん
垢版 |
2016/12/19(月) 23:46:04.62ID:qsdLnaaR
>>276
ありがとう。
拡張スタイル使ってもやっぱり無理だ。
思い通りに動かない。
数年前からずっと謎なんだよなこれ。
動作上問題が少ないから我慢してたんだけども。

それっぽいウインドウは出るものの、paint.netのように全ウインドウがアクティブ状態にならない。
【参考画像】http://news.softpedia.com/images/extra/WINDOWS3/large/paint.net/paint.net%20interface.jpg
paint.netを実際に使ってるとよく分かるんだが、
参考画像のようにメインのウインドウもツール用のウインドウも常にアクティブな状態が維持される。
しかし、拡張スタイルでWS_EX_TOOLWINDOWを指定してもアクティブなウインドウは常に1つ。
メインのウインドウをクリックすればツール用ウインドウは非アクティブになり、
ツール用ウインドウをクリックすればメインウインドウは非アクティブになる。
非常に気持ちが悪い。
確かにWS_EX_TOOLWINDOWを利用すればメインウインドウより常に前面になり、
タスクバーにも表示されず、非常にpaint.netのツールウインドウと似たような挙動になるが、
このアクティブ/非アクティブに関しては挙動が全く違う。
ちなみにアクティブ/非アクティブの判断はタイトルバーの色で判断している。
さらに参考画像のツールウインドウのような右上の正方形の閉じるボタンの表示のさせかたも分からない。

・・・と思ったら出てきたわ。
http://www.catch22.net/tuts/docking-toolbars-part-1

やっと出てきた。
WS_EX_TOOLWINDOWで検索してもノイズが多くてなかなか出てこなかった。
(ノイズ = MSDNのウインドウスタイルの一覧をコピペしただけのゴミサイト)
ノイズゴミサイトマジで迷惑。
嫌がらせでしかない。
0278デフォルトの名無しさん
垢版 |
2016/12/19(月) 23:50:28.70ID:qsdLnaaR
結局今回のカギはGoogle画像検索。
ふと「サンプル載せてるサイトの半数くらいはスクショも載せてるのではないか」と思い、
例の拡張スタイルで画像検索。
俺がやりたいのと同じ状況になってる画像を見つけて開いたらビンゴ。
画像検索なんて今まで思いもよらなかったよ。
文字検索するとノイズゴミサイトばかり出てきてどうにもならなかった。
0279デフォルトの名無しさん
垢版 |
2016/12/19(月) 23:52:55.75ID:qsdLnaaR
MSDNのコピペサイト作ってるゴミ共は早く死ねばいいのにな。
役に立たないどころか大迷惑。
最近流行りの質の低いキュレーションサイト()と同レベル。
0281デフォルトの名無しさん
垢版 |
2016/12/20(火) 06:12:08.47ID:ADGhogoA
google personal blocklistでかたっぱしからブロックしてる
xxxユーザー会もノイズ源だね
0282デフォルトの名無しさん
垢版 |
2016/12/20(火) 09:20:12.73ID:F0IdvAwo
顔写真ブロックは必須
おまえらキモ面なのに何故あんな目立つ場所に配置すんだ
0283デフォルトの名無しさん
垢版 |
2016/12/20(火) 12:55:43.49ID:lAXr92yw
>>278
おめ
興奮は伝わったが
もちつけ
0284デフォルトの名無しさん
垢版 |
2016/12/20(火) 13:00:10.44ID:lAXr92yw
>>279
はてぶのことですねわかります
0285デフォルトの名無しさん
垢版 |
2016/12/20(火) 16:58:42.80ID:WXAyO/1W
>>277
そういうときはいっそそのソフト解析したら?
Paint.NETなら簡単に逆コンパイルできるし、Spy++とか使うだけでもある程度わかる
0290デフォルトの名無しさん
垢版 |
2016/12/20(火) 22:05:37.09ID:JPbALvOm
MSDNのコピペサイト全般のことだろう>アフィ
0291デフォルトの名無しさん
垢版 |
2016/12/21(水) 01:04:08.51ID:HCdO29Rc
質問
writefile関数を使用してint型で、データ保存ができません。同じ悩み持ったことある人いらっしゃいませんか。
0292デフォルトの名無しさん
垢版 |
2016/12/21(水) 01:09:18.76ID:GvkBvmPc
int Data = 123456;;
DWORD writeLen;
WriteFile(hFile,&Data,sizeof(Data),&writeLen,NULL);

こういうことだろ?
0293デフォルトの名無しさん
垢版 |
2016/12/21(水) 01:10:40.03ID:kLgQ2k1v
変数のアドレスをwritefileにわたさないとだめ。数値そのままわたしてるんでしょ
0296デフォルトの名無しさん
垢版 |
2016/12/22(木) 12:50:31.88ID:y+mdv7YD
-jp もお忘れなく
0297デフォルトの名無しさん
垢版 |
2016/12/22(木) 13:04:48.47ID:hYDEOt1H
どうしてこういう訳そのままずっと放置してんだろうな

> 関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。
> If the function fails, the return value is zero. To get extended error information, call GetLastError.
0298デフォルトの名無しさん
垢版 |
2016/12/22(木) 18:24:16.26ID:zHNnrJEM
>>296
なんで付けるの?
誤訳トラップにハマりたいの?

俺は誤訳トラップどころか英語版と日本語版で引数違うトラップにハマったことがあるけども。
日本語版を穴が空くほど見て確認したけど何日経ってもコンパイルが通らず、
何の気なしに英語版開いたら引数の数が違って、
英語版見ながら修正したら一発でコンパイル通ったわ。
0300デフォルトの名無しさん
垢版 |
2016/12/22(木) 18:47:30.93ID:YVr1LIe6
>>298
今時どんな開発環境使ってるんだよ w
VisualStudio なら関数名 + '(' を入力した時点でプロトタイプが表示されるだろ
0301デフォルトの名無しさん
垢版 |
2016/12/22(木) 18:55:29.30ID:zHNnrJEM
>>299
ごめんなさいwww

>>300
その当時はVector辺りで見つけてきた適当なテキストエディタとBCCだったよ。
0303デフォルトの名無しさん
垢版 |
2016/12/22(木) 22:46:25.55ID:+nnZ9oR0
レポートタイプのリストビューをクリックしたら、その行のデータに対応する内容を
別の窓に詳細表示するというような動作をしているのですが、クリック時は NM_CLICK
を処理してクリックされた行を nmLv->iItem メンバを参照して知ることができます。

オペレーションとしてはマウスだけではなくキーボード操作でリストビューの選択行を
次々と移動させることも多いので、LVN_KEYDOWN も処理して上記と同様の動作を
させたいのですが、LVN_KEYDOWN 処理時は nmLv->iItem の中身が不定です。

LVN_KEYDOWN 処理時に ListView_GetNextItem で LVNI_ALL | LVNI_SELECTED を
指定して選択行を調べると、キーボードを押して選択行を変更する前の選択行が
得られてしまいます。

この辺は、一旦メッセージループを回すなどしてから現在の選択行を得ること自体は
可能と言えば可能なのですが、ここまでしないとダメなのかという疑問があります。

LVN_KEYDOWN 処理時、もしくはキーボード操作で選択行を変更した際、簡潔に
現在の選択行を得る方法はありますでしょうか?
0305デフォルトの名無しさん
垢版 |
2016/12/23(金) 14:54:42.80ID:qGVMhgWM
質問です。

win10 x64

windows がキャッシュしてる dns の名前解決結果の一部を書き換えることは可能ですか?
または、名前解決の最中に結果をいじるようなフックは出来ませんか?

例えば、example.com の ttl を長めに書き換える、とかです。

よろしくお願いします。
0306片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/12/23(金) 15:00:49.80ID:3xdKhrkh
>>305
デバッグ特権があれば、別のプロセスのプロセスメモリーにアクセスすることも可能。
0307デフォルトの名無しさん
垢版 |
2016/12/23(金) 15:29:20.66ID:Kb3OsEli
対象アプリ限られてくるけどAPIフックすりゃ簡単に結果改竄はできるな
キャッシュ改竄はフィルタードライバあてる面倒なのしか思いつかない
0308デフォルトの名無しさん
垢版 |
2016/12/23(金) 15:36:22.73ID:5J5pLbD7
以下の処理を実装したく、助言をお願いします。

ダブルクリックや右クリ開くなどで、ファイルを開く際に
関連付けの有無に関わらず、そのファイルのパスを取得したい。

ShellProcあたりのフックかと考えましたが、パスをどうやって
調べるのか分かりません。

どうぞ宜しくお願いします。
0309デフォルトの名無しさん
垢版 |
2016/12/23(金) 15:54:43.63ID:Kb3OsEli
目的次第だがShellProcは違うんじゃないか
explorer.exeに対してShellExecuteあたりのフックか?
0310デフォルトの名無しさん
垢版 |
2016/12/23(金) 15:59:09.98ID:5tPECy1o
>>305
proxy arp
0311305
垢版 |
2016/12/23(金) 16:14:48.81ID:sqLqmtwC
>>305, 306

レスありがとうございます。
DLL注入やアタッチのよるDNS改ざんは確かにできそうですね。
検討してみます。

ちなみに、プロセスは基本的には chrome です。


>>307

できればフィルタードライバの設計を、おおざっぱでもいいので教えて頂けませんか?
(ドライバのコーディングは、ほぼ経験が無く、ネットワークそのものの知識はあるものの、windows内部での扱いやAPIはまったく知識が無いです)

ちなみに、VPNによる仮想アダプタと、複数のネットワークカード(アダプタ)があるのですが、それでも対応可能でしょうか?
(直感的には、特定アダプタに対するフィルターだと、アダプタの優先度に左右されそう。アダプタ依存にはしたくないです)
0313デフォルトの名無しさん
垢版 |
2016/12/23(金) 16:45:40.87ID:Kb3OsEli
>>311
WDKサンプルのこのあたりが参考になるのかな
NDIS 6.0 Filter Driver
Windows Filtering Platform Packet Modification Sample
0316デフォルトの名無しさん
垢版 |
2016/12/25(日) 22:10:16.80ID:n7UGfNqJ
iniファイルから文字列を読み込むGetPrivateProfileString()なんですが、
セミコロン以下のコメント文まで読み込んでしまいます。

コメント文は読み込まないようにできないでしょうか?
それとも自分でコメント文を削除するしかないでしょうか?
0318316
垢版 |
2016/12/26(月) 01:06:56.36ID:CvSBnmkv
>>317
なるほど!
ありがとうございました!
0320デフォルトの名無しさん
垢版 |
2016/12/26(月) 21:20:51.81ID:SUV7MStA
セミコロン付けたらコメントになるって言うけどよー
あれ実際は特別扱いなんかしてなくて、例えば
;abc=def
にしたら「;abc」って名前になるから「abc」に一致しなくなるだけじゃないかと疑ってる
0323316
垢版 |
2016/12/29(木) 11:37:53.16ID:E1SACFDz
使ってるエディタが.iniの同一行コメントもコメント色に変換してくれるので、誤解してしまいました。
気を付けます。
0324デフォルトの名無しさん
垢版 |
2016/12/30(金) 13:34:08.58ID:qor2kyvR
winsockの関数フックしたいんですけどインポートアドレステーブル上の
ws2_32.dllの関数だけ取得できません。どうしたら?

ttp://up2.cache.kouploader.jp/koups19399.txt
このコードは
自身のロードしたDLLの関数名を列挙するだけのシンプルなものですが、
やはりwinsockの関数名だけ取得できないです。

ImageDirectoryEntryToData()の第3引数を
IMAGE_DIRECTORY_ENTRY_IATや
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORTに変えても取得できませんでした(そもそも関数がnull返してくる
0328324
垢版 |
2016/12/30(金) 14:41:23.26ID:qor2kyvR
>>325
成功しているようです

>>326
関数名が名無しということですか?

>>327
どのタイミングでですか?


if(IMAGE_SNAP_BY_ORDINAL(pThunkData->u1.Ordinal))
winsockの関数だけこのif文が真になります。

ttp://i.imgur.com/jWNmlgm.png

デバッガでIAT覗くと、正しい関数名ではないが、2つの関数らしきもの?が表示されていて
これがWSAStartup()/WSACleanup()に対応するものだと思われます

他のDLLでは関数名が正しく表示されます。

これが、関数名が名無しということならどう対処するのかご教示頂きたいです。

海外のフォーラムの似たような質問では
ImageDirectoryEntryToData()の第3引数を
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORTに変えて成功したと書かれていたんですけどね、成功しませんでした。
0330デフォルトの名無しさん
垢版 |
2016/12/30(金) 15:39:26.81ID:Q3tvxZdg
マクロというオチ
0332デフォルトの名無しさん
垢版 |
2016/12/30(金) 19:08:50.21ID:qor2kyvR
>>331
ヒントありがとうございました。解決しました

PIMAGE_THUNK_DATA pThunkData = (PIMAGE_THUNK_DATA)((PBYTE)hmodCaller + pImportDesc->OriginalFirstThunk);
PIMAGE_THUNK_DATA pRealThunk = (PIMAGE_THUNK_DATA)((PBYTE)hmodCaller + pImportDesc->FirstThunk);
while(pThunkData->u1.Function){
FARPROC pfnImportedFunc = (FARPROC)(pRealThunk->u1.Function);
・・・
上記のIAT上の関数アドレスと、
LoadLibrary()&GetProcAddress()で取得したwinsock関数のアドレス
を比較し一致したものを書き換えたら成功しました。

ttp://blog.techlab-xe.net/wp-content/uploads/2014/05/pe-format-import-func-list.png
これそもそも
文字列比較より
アドレス比較を用いる方法のほうが正確なやりかたですよね?
0333デフォルトの名無しさん
垢版 |
2017/01/21(土) 17:55:42.90ID:0py1wTB0
CreateProcess関数の質問です。この関数で開いた外部プロセスを、操作しようとしたらハンドルされていない例外エラー発生したことある人いますか?

エラーメッセの
オブジェクト参照がオブジェクトインスタンスに設定されていませんの意味もいまいちわからずです。悩んでいます。

どなたかヒントをくれたら幸いですm(__)m
0334デフォルトの名無しさん
垢版 |
2017/01/21(土) 18:11:33.93ID:3w6w5xSi
たぶんCreateProcessの問題じゃなくてソースコードの問題
基本的なとこをどっか間違えてると思う
0337デフォルトの名無しさん
垢版 |
2017/01/21(土) 23:19:24.15ID:0py1wTB0
>>335
>>336

HWND hwnd;
STARTUPINFO si;
BOOL boRet = 0;
DWORD dwRet = 0;

ZeroMemory(&si, sizeof(si));
ZeroMemory(&piMplab, sizeof(piMplab));
si.cb=sizeof(si);

GetStartupInfo(&si);
boRet = CreateProcess(_T(""C:\Program Files (x86)\Microchip\PICkit 3 v3\"Pickit3.exe"),NULL,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&piMplab);

CloseHandle(piMplab.hThread);
CloseHandle(piMplab.hProcess);

すみませんこんな感じですm(__)m↑
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況