X



Win32API質問箱 Build127
0001デフォルトの名無しさん
垢版 |
2021/12/09(木) 21:32:56.60ID:sYLpmj89
Win32APIについての質問はこちらへどうぞ。

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

■過去スレ
Win32API質問箱 Build126
https://mevius.5ch.net/test/read.cgi/tech/1588339011/
Win32API質問箱 Build125
https://mevius.5ch.net/test/read.cgi/tech/1551247748/
Win32API質問箱 Build124
https://mevius.5ch.net/test/read.cgi/tech/1510395780/

■関連スレ
Visual Studio 2020 Part1 https://mevius.5ch.net/test/read.cgi/tech/1634166667/
Visual Studio 2019 Part7 https://mevius.5ch.net/test/read.cgi/tech/1634178709/
Visual Studio 2017 Part7 https://mevius.5ch.net/test/read.cgi/tech/1558179898/
【C++】 DirectX初心者質問スレ Part41 【C】 https://mevius.5ch.net/test/read.cgi/tech/1521786252/
0805デフォルトの名無しさん
垢版 |
2024/04/29(月) 03:35:32.42ID:xgq67JZI
intから__int64へ
0807デフォルトの名無しさん
垢版 |
2024/05/08(水) 06:59:53.68ID:CU7bUsfh
自作アプリに対してSendMessageでWM_APP送ってるけど送れてない(受信できていない)ことがあったので
送信側でGetLastErrorしたら
> 0x05:アクセスが拒否されました。
が取れました。

ここによると
ttps://learn.microsoft.com/ja-jp/windows/win32/api/winuser/nf-winuser-sendmessage
> メッセージが UIPI によってブロックされると、 GetLastError で取得された最後のエラーは 5 (アクセス拒否) に設定されます。

これに該当してる?のか他の原因でアクセス拒否されているのか分からないけど、
受け側のアプリはずっと起動したままで直前までメッセージ受信できていたことと、
その後もアプリが死んでいるようには見えず操作できるし動作ログも残るため、
ただただWM_APPメッセージ受信のみ(?)できなくなっているような状況です。

ここで質問ですが、どういう時に急にメッセージ受信できなくなるのか、エスパーお願いします。

今後の対策としては受信側でChangeWindowMessageFilterを使ってWM_APPを許可すれば良さそうだと当たりは付けていますが・・
権限レベルを弄ったりということは一切していないので、問題の発動条件が知りたいです。
0809デフォルトの名無しさん
垢版 |
2024/05/08(水) 21:47:14.20ID:5PSVmBb2
んで、この手のシステムからの意図しない介入問題が起きた場合は、
原則プロセスの再作成で解決するしかない
0810デフォルトの名無しさん
垢版 |
2024/05/08(水) 21:51:37.73ID:5PSVmBb2
これはLow Level Hookが外れた時の対処と同じ
恐らくSendMessageの処理が規定時間以内に終わらなかったとかで適当に介入してるんだろう
知らんけど
0812デフォルトの名無しさん
垢版 |
2024/05/09(木) 11:45:17.50ID:LBnBOAOP
>>808
再現性ないと言っていいのか、手元では再現できず
エラーが出た環境でも普段は問題出てなくて、たまたま問題が出たのに気付いてログを漁ってエラーコードが分かり、
過去ログも遡ると半月前にも一度エラーが出ていたのは分かりました

この問題が出た環境は24時間PC&アプリ起動しっぱなしということらしく、その時点で
何となくお察し感がなくもないですが原因ははっきりさせたいなと

>>809-810
受信側は一切メッセージの受信を感知していない(ログに全く残らない)ようなので
規定時間以内に終わっていないというようなことではないとは思いますが、
何かしらの原因で適当に介入されている感はすごくあります

まあ適当に〜されたとしても、はっきりしたいところです
0813デフォルトの名無しさん
垢版 |
2024/05/09(木) 15:19:14.25ID:HEWeaKRP
断片化回避のためにSetFilePointer -> SetEndOfFile -> SetFilePointerサンドイッチってもう古いやり方?
.NETのFileIO実装がSetFileInformationByHandle(FILE_ALLOCATION_INFO)でやってるんだが
0815デフォルトの名無しさん
垢版 |
2024/05/09(木) 21:40:33.69ID:UHyVEDy6
>>811
ちょっと調べてはみたけどstackoverflowでも迷宮入りしててだめだったんよね
SYSTEMプロセスから送れば拒否られないとは思うが
確実にプロセス間通信をしたかったらメッセージよりは名前付きパイプが無難だろうな
0816デフォルトの名無しさん
垢版 |
2024/05/10(金) 23:35:02.72ID:r04xuHSU
>>815
迷宮入りまで調べてくれてたんですね

確かにパイプが無難です
今さらコイツを修正するには作り直しレベルなのでもう無理ですがw

とりあえずしばらく放置して色々な環境でログ収集して情報整理します
ありがとうございました
0817デフォルトの名無しさん
垢版 |
2024/05/10(金) 23:49:50.70ID:irdjP1bw
>>807
再現性はともかくとして、SendMessageが途中から拒否られる事象がOSのどのバージョンで発生したか書いといてくれると嬉しい
0818デフォルトの名無しさん
垢版 |
2024/05/11(土) 03:02:04.26ID:7XNHipLd
>>817
どうもすみません
Windows11 home 23H2です

ちょうど今おかしな環境のPCがまたおかしくなっているようなので調べていましたが、
受信側プロセスが管理者特権に変更されているようで、これが原因ですね

送信側は管理者特権は付与されていませんが、送信側プロセスから受信側プロセスを
起動していますから、最初は特権が付与されていないはず・・・

ということでどちらのプロセスも再起動させたところ、どちらも標準ユーザーになっていました
explorerからexeプロパティを見ても管理者権限はチェックされていないようです

意図せず途中で管理者特権が付与される可能性はあるのでしょうか?
(プログラム的にはそんなことしているつもりはもちろん無いですが)
0819デフォルトの名無しさん
垢版 |
2024/05/11(土) 12:31:06.19ID:PynvVCIt
無意識にそんな特権付与されたら怖すぎるがなw
システムが一時的に特殊な状態にしてるんじゃないの
0820デフォルトの名無しさん
垢版 |
2024/05/13(月) 00:51:53.26ID:UH9hVJYb
APIの先で起動されるスレッド(OSが起動する)が管理者特権付きで
それがアクティブな瞬間はプロセスが管理者特権付きに見えて、
そんなタイミングのプロセスに一般ユーザがメッセージ送ると、
管理者様に対して頭が高いぞってアクセスデナイド。
とか想像してみた。
0821デフォルトの名無しさん
垢版 |
2024/05/13(月) 02:44:07.73ID:eZXBgDRS
818です

ログを見ると、一度メッセージ受信できなくなるとずっと受信できていないようです
管理者特権が付いているのを確認したのはタスクマネージャでの目視ですが、
見たところずっと特権がついているのでタイミングの問題ではなく、何かしらの拍子で特権がついたまま
という感じですね

今のところ、24時間起動したまま使い続けていますがあれから特権はついていません

特権を必要とするようなコードを書いたことない(つもり)なので、原因にたどり着くのは中々難しい状況です
例えば、どんなことをすると特権が付与される(UIもなく勝手に?)のでしょう?
0822デフォルトの名無しさん
垢版 |
2024/05/16(木) 19:26:12.96ID:s6fDlAb8
心当たりが無いなら今月のCVE-2024-30051だとか特権の昇格の脆弱性のどれかに引っかかってる可能性あり
レスを投稿する


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