Win32API質問箱 Build126

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2020/05/01(金) 22:16:51.96ID:ZJ42fMZB
Win32APIについての質問はこちらへどうぞ。

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

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

■関連スレ
Visual Studio 2019 Part4 https://mevius.5ch.net/test/read.cgi/tech/1585715794/
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/
2021/02/05(金) 00:56:51.01ID:Nx26rnNw
>>478
FILE_ID_INFOのFileIdで128bitに拡張されてるな
2021/02/05(金) 01:06:52.68ID:U+NO2W2G
>>480
https://hp.vector.co.jp/authors/VA016117/esccd.html
483480
垢版 |
2021/02/05(金) 08:22:01.08ID:AkHBgQOB
>>482
まさにこれです!
ありがとうございました!
2021/02/05(金) 11:21:57.41ID:L6Uw8oZz
>>479>>481
膨大な量のファイルを列挙するにあたってハッシュ計算するのも、ハンドル開いてBY_HANDLE_FILE_INFORMATION読み込むのも億劫だったんだが
NtQueryDirectoryFileでmftからファイルID取れるってことに気付いた
2021/02/05(金) 12:13:51.05ID:UnxdNd0N
画像ビューワまだできないの?
みんな待ってんだから
486デフォルトの名無しさん
垢版 |
2021/02/06(土) 00:30:35.01ID:L1ZLjs+J
コントロールパネルでフォントを「非表示」にすると、言語に応じて
フォント選択画面に出てこなくなり選びやすくなるという機能があります。
この「非表示フォント」かどうかを判別する方法はありますでしょうか?

ChooseFont()ではなくEnumFontFamiliesEx()を使い、独自のフォント選択ダイアログを作成中ですが
非表示フォントを判別する方法がわからずすべて列挙してしまいます。
2021/02/06(土) 00:37:08.03ID:j9M7S4X7
>>486
レジストリ設定によるらしい。

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Font Management

https://visualstudiomagazine.com/Peterson1110?m=1
2021/02/06(土) 02:04:53.58ID:L1ZLjs+J
>>487
ありがとうございます!
レジストリに「非表示フォント」の一覧が記録されているのですね。
その内容を取り出して比較してフィルタリングしたいと思います。
489デフォルトの名無しさん
垢版 |
2021/02/13(土) 06:46:11.29ID:neaggcXJ
ExpandEnvironmentStrings() は、%環境変数%を展開してくれるけど、
PowerShellの$env:環境変数 を展開してくれるAPIとかないのかな?
2021/02/13(土) 10:11:29.20ID:PYtZn7CJ
>>489
[Environ]::ExpandEnvironmentVariables($env:環境変数)
491デフォルトの名無しさん
垢版 |
2021/02/14(日) 11:18:45.76ID:PGTjJwEI
2021/02/10
WindowsのTCP/IP実装に複数の重大な脆弱性、今月のセキュリティパッチはかならず適用を
ブルースクリーンが引き起こされるサービス拒否(DoS)脆弱性はすぐに攻撃が出回る可能性
https://forest.watch.impress.co.jp/docs/news/1305583.html
2021/03/03(水) 09:48:23.14ID:GTR/ytE6
Win32の質問というよりOSの仕様に近い質問になってしまいますが、
新しくファイルを作るにあたり予めファイルサイズが分かっている場合、SetFilePointerEx&SetEndOfFileで予めファイルサイズを決めておくと断片化しづらいというテクニックがありますが
一度のWriteFileで一気に書き込む場合は上記の工程を行わずとも断片化しづらいのでしょうか?
2021/03/03(水) 17:46:09.32ID:Uextqx1e
本当にそんな制御になっているか分からないけど理屈だけだと、最初に一発ここまで
使うよって宣言しておけば領域が一挙に確保されるかもしれない

逐一書き込みを行ってその度に領域を確保すると、システム全体がシングルスレッドで
動いていれば(ありえないけど)、自分が書き込みを行っている間に別の
プロセス/スレッドが書き込みを行うと、領域が分断されると思うのだけど
494デフォルトの名無しさん
垢版 |
2021/03/09(火) 14:20:50.29ID:iP4nVCks
断片化対策というか
常に同じセクタに書き込むように出来なかったっけ?
2021/03/09(火) 23:41:10.45ID:zAPDJC3N
高速ファイルコピーのフリーソフトの作者のブログか何かでこんだけWindowsのコピーは大変だよみたいな記事を読んだ覚えがある
2021/03/10(水) 03:22:04.66ID:Gf/98J6J
これやな
ttps://m.facebook.com/dnobori/posts/2142836202459674
2021/03/10(水) 07:59:53.47ID:pDjVp4Qi
面白かった
2021/03/10(水) 09:21:13.05ID:XSc6HIdm
結構読んだと思ったらまだスクロールバーが半分で、うんざりして読むのとWindowsでファイルコピーするのをやめた
2021/03/10(水) 09:48:53.12ID:ayODL1B0
リーナスですらもNTFSが現状ベストって認めてるくらいだからその分複雑なんだろうね
500デフォルトの名無しさん
垢版 |
2021/03/26(金) 09:24:09.04ID:saZG9dHC
ほとんどの環境で特にエラーは出ないのですが
特定の環境でSHFileOperation()をFO_COPYで呼ぶとERRORONDESTが返ってきます
ファイルが使用中で書き込みできない場合は別のエラー、
ファイルではなく同名のフォルダでも別のエラーとなり
エクスプローラで手動でコピーは可能です
コピー元は全て英語のD:\AAA\BB.exe, コピー先は%temp%\AAA\\BB.exeを展開したもので
C:\Users\Username\AppData\ocal\Temp\AAA\\BB.exe
リトライしても改善しません

SHFileOperation()でERRORONDESTが返る要因てどんなのがありえそうですか
2021/03/26(金) 12:36:51.59ID:HcNsE5xL
>>500
バックスラッシュが二重になってるよ。
2021/03/26(金) 13:42:06.64ID:cPlbb1Mg
pFromとpToの末尾は'\0'が2つ必要だけど忘れてない?
2021/03/26(金) 17:20:08.28ID:XmR64PQN
pTo はダブルにする必要なくて pFrom のみじゃね?

複数個のファイル名を \0 をセパレータにしての連結して渡す意図かと
 pFrom "fileA\0fileB\0fileC\0"
 pTo "dir\\"
fileA,fileB,fileC を dir\ へ
504500
垢版 |
2021/03/26(金) 18:24:57.44ID:saZG9dHC
>>501
すみません、バックスラッシュはコード上は正しかったです
ちなみにスラッシュが足りない場合は0xA1 指定されたパスは無効です が返ります
多い場合は0xb7 既に存在するファイルを作成することはできませんとかが返ります  

>>502
'\0’は末尾に4個以上はいれてます

FOF_SILENTは無効にして試しているんですが、有効にして書き込み禁止のファイルを上書きしようとすると
0x7cシステム コール レベルが間違っていますがかえります

この環境では、0x10000:ERRORONDESTが返るんですけど、
ほかの環境でERRORONDESTが再現できないんですよね..
505デフォルトの名無しさん
垢版 |
2021/03/26(金) 18:28:02.43ID:3gUI29td
>>499
あわしろ氏は、NTFSは欠陥品と言ってたけどな。
2021/03/26(金) 19:16:16.62ID:MYLkW03n
>>504
FOF_MULTIDESTFILES を指定した場合はどうなるの?

というか、まず C:\Users\Username\AppData\ocal\Temp\AAA というディレクトリじゃなくて
決め打ちでコピー先を D:\BBB\BB.exe って指定してうまくいくかどうか試してみたら?(D:\BBB というディレクトリは作成しておく)
これで失敗すれば関数の呼び出しに問題があると言えるし
成功すればその C:\...\Temp\AAA というディレクトリに問題がある
507500
垢版 |
2021/03/26(金) 19:31:39.70ID:saZG9dHC
>>506
決め打ちでパス指定してもダメでした
というかどこからどこにコピーしても全部ERRORONDESTのエラーになります
問題あるのは特定のPCだけで、他のPCだと問題なく動作するので、
何か変なソフトに邪魔されているかもしれません

もうだいぶあきらめ気味ですが、解決したら続報のせます
回答くれた人ありがとう
2021/03/26(金) 21:05:36.78ID:mmjZdfI1
セキュリティーソフトとか、アクセス権限とか
2021/03/26(金) 21:09:03.33ID:CAbtDF19
エクスプローラの手作業ではコピーに成功してるらしいんだよねぇ
2021/03/27(土) 15:56:10.46ID:VE8mC68O
特定のも含めてPCがそれぞれどんな構成か出さないとエスパー案件になりそう

windowsがunicode設定だったり実はバージョン違いとかとか
511デフォルトの名無しさん
垢版 |
2021/04/03(土) 22:56:21.93ID:pdE0Ehe0
GetFullPathNameW() に C:\ ではなく C: を渡すとどんな文字列が返ってくるのかお教えください
2021/04/04(日) 01:15:17.97ID:SuYLyBNw
>>511
ばーか
って返ってくるよ
2021/04/04(日) 08:37:20.89ID:SvWSCx06
>>511
試す気は全くないんだな?w
514デフォルトの名無しさん
垢版 |
2021/04/05(月) 01:40:45.93ID:VcR5h3be
fopen()に環境変数、例えば %VARIABLE% を含むパスを渡した場合、
fopen()の側で環境変数を展開してからファイルオープンするかどうかって決まってますか?
2021/04/05(月) 02:22:21.13ID:hqxnqcGl
>>514
環境変数は@自分で目的のものを入手して、A自分で展開するしかない、かと
2021/04/05(月) 05:55:39.12ID:B3M7CzzN
>>514
決まってる
2021/04/05(月) 20:35:30.57ID:XdKinJWZ
fopen()はWin32APIじゃないから、決まってないんじゃないの?
2021/04/05(月) 21:00:39.05ID:ogb+W0EK
決まってるという言い回しがアレだが、仕様としては>>515なのではないか
GetEnvironmentVariableとかExpandEnvironmentStringsとか使えと

つーか、511にせよ514にせよ自分で試せよ
内容からして同一人物か?
2021/04/05(月) 22:17:44.32ID:36Cyp5PA
便乗だけどREG_EXPAND_SZ属性のレジストリの文字列って適当なAPIで取り出す時には展開されてる事を期待していいのかな
520デフォルトの名無しさん
垢版 |
2021/04/05(月) 22:28:04.02ID:VcR5h3be
fopen()つまりCreateFile()の環境変数展開の仕様が決まっているのならその文章のURLを貼ればいいだけで、そういった文章がないということは決まってないということだろう。
2021/04/05(月) 22:35:50.69ID:SUd0RcBB
環境変数を展開するというなら%が含まれるファイル名の時は%をどうエスケープするの?
CreateFileのリファレンスに書いてある?
2021/04/05(月) 22:41:43.76ID:5fbmy6mD
>>520
そういった文章がない=展開しないと決まっている じゃないかね
523デフォルトの名無しさん
垢版 |
2021/04/05(月) 22:42:12.28ID:VcR5h3be
>>518
ローカル環境で試すことに意味はない
重要なのは仕様だけ

>>521
みたことない
524デフォルトの名無しさん
垢版 |
2021/04/05(月) 23:41:24.36ID:VcR5h3be
そもそもWin32APIはコマンドプロンプトのシェルに依存すべきではないから%VARIABLE%を勝手に展開するのはあまり好ましくない。
PowerShellやbashの書式で環境変数展開できないのは不公平になる。
2021/04/06(火) 00:50:31.34ID:7Od2aTl4
>>520
>fopen()つまりCreateFile()の環境変数展開の仕様が決まっているのならその文章のURLを貼ればいいだけで

お前が自分で探してこいよ
何言ってんだこいつ
2021/04/06(火) 00:51:08.33ID:yLju/cD3
>>521
%%じゃないの?
2021/04/06(火) 00:56:50.13ID:XnTB+TXu
>>526
printfじゃねーんだぞ
2021/04/06(火) 01:41:26.10ID:Im/sjr+Q
書いていることが仕様であって、書いてないことは仕様ではない
CreateFileでパンが焼けないと書いていないからパンが焼けると判断するのはキチガイ以外他ない
2021/04/06(火) 05:09:02.50ID:wdOO9l8n
全てのAPIにパンは焼けませんって書かせる基地外w
2021/04/06(火) 09:41:04.31ID:9TplgPlq
文字列の痴漢は頼みもしないのに勝手にされたら邪魔だ
2021/04/06(火) 12:59:56.19ID:EpJptavP
テストもしないクズなのは確定なんだが
「仕様」かどうかが主語であるべきなのに、仕様かどうか「決まっている」というところを主語にして
続けていること自体がもはや技術者ではない
2021/04/06(火) 17:02:11.12ID:BqyPmRZM
>>520
>fopen()つまりCreateFile()

全然つまりじゃねー
Windowsではそういう環境変数よりもレジストリ使えってスタンスじゃないの
2021/04/06(火) 17:26:56.80ID:mi+0bNxV
C言語って極力余計なことはしないスタンスだから
環境変数の展開はやりたければ、自前でやったうえで fopen に渡せであって
展開動作を行なうようなのは printf のフォーマットのように 特記されてる


気がする
2021/04/06(火) 17:50:22.69ID:yLju/cD3
>>526
でもレジストリに記録されているMSのデータって%1とかそういう系多いよね
535デフォルトの名無しさん
垢版 |
2021/04/08(木) 14:31:52.37ID:BYjSvKlS
cout 前提に描かれてて
wcout 使うとおかしくなる
2021/04/08(木) 15:39:57.79ID:96RQoR7P
よかったね
2021/04/12(月) 12:14:25.84ID:8dcLaG4E
レジストリのCLSIDのツリー見ると吐きそうになるんだけどどうにかならないのか
2021/04/12(月) 13:51:17.63ID:1iNVR91A
あれは人の赴くところではない
2021/04/12(月) 21:29:02.33ID:coUHZ64T
プロセスにデバッガがアタッチできないようにしたい場合はどうすればいいのかな
2021/04/13(火) 00:39:58.51ID:FveNCngD
IsDebuggerPresentでも使ってアタッチされてたらプログラムを終了させる
カジュアルハック相手なら十分でしょ

本気でハックしてくる相手なら十分な対策は存在しないので考えるだけ無駄
Webアプリにするとか、攻撃者のテリトリーで秘密を実行しないことを検討しろ
2021/04/13(火) 09:31:13.07ID:KgfckCYX
多重のアタッチってできたんでしたっけ?
自前で用意しておいたデバッガプロセスに先にアタッチさせておくとか?
2021/04/13(火) 09:58:40.85ID:K5Ly9c1T
それAPIHookでFALSE返されたら終わらない?
2021/04/13(火) 15:25:33.02ID:FveNCngD
だから考えるだけ無駄だって
2021/04/13(火) 16:57:10.31ID:XgVnBmdE
難読化も含めて ある程度攻撃者に対して面倒くさくさせることは出来ても
バイナリ渡した時点で無敵はない。。。
2021/04/13(火) 17:42:43.87ID:fWoCeTea
サブスクが許される時代なので
546デフォルトの名無しさん
垢版 |
2021/04/16(金) 06:12:55.34ID:aOiTCYkX
バッチファイルのコマンド文字列に含まれるマルチバイト文字が既定のコードページで解釈されることを保証するにはどうすればいい?
バッチファイルをパイプでつないだ別プロセスがSetConsoleOutoutCP()を呼び出すと、バッチファイルから呼ばれたコマンドで引数が文字化けしてしまうようだ
547デフォルトの名無しさん
垢版 |
2021/04/16(金) 06:14:31.74ID:aOiTCYkX
SetConsoleOutputCP()に訂正。
hodeでSetConsoleOutputCP()が呼ばれると、foo.bat内のコマンドが正しく引数を受け取れない

foo.bat | hoge
2021/04/16(金) 12:10:08.81ID:k5zYfJVI
Windows 版 Ruby(MSYS2)では、端末の日本語入力でバグるので、あきらめた。
CP932, UTF16LE などか?

UTF-8 にも設定できるようだが、それでもバグる。
自分で環境変数RUBYOPT に、--encoding=UTF-8 を設定しているからかも知れないけど

結局、Windows をあきらめて、Linux を使う事にした

WSL2, Ubuntu 18.04 の端末では、バグらない。
たぶん、UTF-8 に固定されているのだろう
549デフォルトの名無しさん
垢版 |
2021/04/16(金) 15:13:16.68ID:aOiTCYkX
>>548
情報をありがとう

foo.bat標準出力の受信先プログラムhogeでSetConsoleOutputCP()を呼び出すのを可能な限り遅らせることで対処することにします
batファイル全体が読み込まれてからバッチ処理されるのではなく一行ずつ解釈されていく副作用は以前にも経験したことがあります
バッチ実行中に、batファイルから一行を丸ごと削除したら、その行が呼ばれなかった
550デフォルトの名無しさん
垢版 |
2021/05/04(火) 11:19:33.09ID:g/PMv139
戸田覚ωωω
https://www.youtube.com/watch?v=tikizYdsaVs
https://www.youtube.com/watch?v=LuqNTgrOIwY
551デフォルトの名無しさん
垢版 |
2021/05/07(金) 17:44:46.80ID:X6HNN+5P
WNDCLASSEX
↑明らかにセクハラ。発音するたびに気まずくなる。MSはセクハラ用語を廃止すべき。
2021/05/07(金) 18:07:42.33ID:jd+9/N8Q
>>551
中学生か
2021/05/08(土) 11:00:03.48ID:St3wXYGV
6809の0x1dとかね
2021/05/09(日) 13:14:58.69ID:Ad3WTS9Y
先生「続きを読みなさい、551
551「はい、えーとワンドクラス…セ、セックス…
先生「ウィンドウクラスイーエックスな
みんな「クスクス…
555デフォルトの名無しさん
垢版 |
2021/05/09(日) 13:37:13.38ID:WMytKT+1
EX
556デフォルトの名無しさん
垢版 |
2021/05/17(月) 13:31:21.74ID:giSQx4b2
vc2017だとkernel32.libとかuser32.libとかリンクするファイルに書いておかないといけなかったけど
vc2019だと何も書かなくても勝手にリンクされてる気がするんだけど
気のせい?オプション変わった?
2021/05/26(水) 08:51:12.20ID:Z7O4lEqC
SelectObject 関数利用時の注意事項
https://jpdscore.github.io/blog/windowssdk/note-when-use-selectobject-function/
2021/05/26(水) 08:56:28.37ID:D9TQ/wp9
印刷関係全滅しそうな怖さがあるな
559デフォルトの名無しさん
垢版 |
2021/05/26(水) 09:06:31.66ID:VVGa10VW
白黒でしかプリントしないアプリとか影響ありそう。
サクラエディタのソースコードCImageListMgr.cppの668行付近に以下のようなコメントがある。

// 単にCreateCompatibleDC(0)で取得したdcや
// スクリーンのDCに対してCreateCompatibleBitmapを

// 使うとモノクロBitmapになる.
560デフォルトの名無しさん
垢版 |
2021/05/26(水) 12:37:07.57ID:D7HypFOx
1.昔がいい加減過ぎたので治すのは良いこと
放置はセキュリティホールになりかねない

2.MSがWin32APIを終わらせるための陰謀
2021/05/26(水) 14:11:55.64ID:e8ZuE3dO
そもそもスクリーンDCにプリンターDCをSelectObjectする意味が分からん
印刷(プレビュー)のときに使うの?

それなら普通、描画処理に出力先のDCを渡してスケーリングするだけじゃないの?
562デフォルトの名無しさん
垢版 |
2021/05/26(水) 16:01:40.89ID:D7HypFOx
WYSIWYG: 「しらんがな」
2021/05/26(水) 18:02:46.62ID:pvBUijTc
今時プリンタにはあんま印刷しないけどpdfには出力したりするから影響はありそうだね
2021/05/26(水) 21:49:00.27ID:OwCAYyY8
いまだにGDIがメンテされているのに驚いた
565デフォルトの名無しさん
垢版 |
2021/05/27(木) 14:47:18.05ID:U0nLnJgd
pdf に出力するときに DC とか使わんやろ
566デフォルトの名無しさん
垢版 |
2021/05/27(木) 15:07:08.38ID:IJ5CRrqh
>>565
え?
2021/05/27(木) 15:13:42.50ID:Rsi8GDuA
DC使うにせよ>557みたいなことしてて問題になるとは思えんけどな
2021/05/28(金) 08:24:04.05ID:8x0p4uVO
>>565
??
2021/05/28(金) 20:06:12.33ID:EVIGfz1i
>>565
???
2021/05/28(金) 20:58:05.97ID:bppkVuU/
自作アプリのPDF作成はプリンタDCに頼らずに自力でやってる
2021/05/29(土) 06:42:49.20ID:XrsIdb/I
わぁそれは凄い。是非GhostScript越えの
OSSとして公開してくれたまえ
2021/05/30(日) 07:46:15.09ID:p+VrCgXk
[名前を付けて保存]で.pdfが選択できるあのパターンか
2021/05/30(日) 07:58:56.70ID:WEq4SBwj
まさか、そんなWin32api全く関係ない
やり方で実装して専用スレで自慢したりしないでしょぅ
XPS経由だってスレ違いかと。

自慢するからにはバイナリーで直接生成していると見た。
公開早よう
2021/05/30(日) 09:45:29.63ID:LN/prPAP
>>573
何を言ってるんだ?
> [名前を付けて保存]で.pdfが選択できるあのパターンか
が簡単にできるなら俺も知りたいぞw
2021/05/30(日) 10:42:53.61ID:ssDmNHo+
PPAPは馬鹿っぽい
2021/05/30(日) 16:45:35.69ID:PqG+8+2Y
>>572
印刷の出力先をプリンタでなく「Microsoft Print to PDF」とかにするって普通にやらない?
古いOSならフリーソフトの「Cute PDF Writer」とか
2021/05/30(日) 20:56:15.06ID:WEq4SBwj
それはプリンタDCを使って印刷するんだべ

570でそれは否定されているぞ
2021/05/30(日) 20:57:42.71ID:p+VrCgXk
>>576
普通にやるけど
ワードも一太郎もドライバ型じゃないpdf出力機能あんじゃん
2021/05/31(月) 16:22:50.06ID:XbQeT4fa
ReadDirectoryChangesExWでroutine渡して非同期フォルダ監視してるんだけど、これって通知来るたびに一回一回登録し直さないといけないの?
通知 → 登録し直しの間は監視漏れが発生しうるって事だよね?
2021/05/31(月) 16:52:07.49ID:3RgsPXyf
http://eternalwindows.jp/shell/shellname/shellname06.html
https://www.usefullcode.net/2007/01/post_45.html
https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shchangenotifyregister
https://docs.microsoft.com/ja-jp/windows/win32/fileio/obtaining-directory-change-notifications
2021/06/01(火) 02:10:15.60ID:Rxn2JXc8
どうやらDeleteFile関数はナイフのように危険な関数と見なされているらしい。使うのはためらうがいい。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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