Win32API質問箱 Build123©2ch.net

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん 転載ダメ©2ch.net2016/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/

0952片山博文MZ ◆T6xkBnTXz7B0 2017/10/04(水) 23:29:27.16ID:HMkkIXOi
ここまで古いヤツが居たとは。。。
博物館行き決定!!!

0953デフォルトの名無しさん2017/10/05(木) 22:13:32.68ID:NosQ3QuL
>>950
高校を4年で卒業した実績を有する吾輩としては、書き下し文を正しく理解する力を能わず。
因りて誤読、誤字、誤文法多数ありなん。人我を天災と呼ぶなん。
人再入可能というなん。なれど具体的例を流れ図で説明するを能わす、Cをもって説明す。
https://ja.wikipedia.org/wiki/%E3%83%AA%E3%82%A8%E3%83%B3%E3%83%88%E3%83%A9%E3%83%B3%E3%83%88
今は昔人Aを診ず、よりてCを持って語る。8080Aを語る我、Cを語ること能わず。

人古き良き伝統を破棄し、新語を創り語る。更なる新語を作るも、これなん、古き伝統なり。
>>952
要は、多重処理が可能な(大型コンピューターでは)一般的なライブルーチンでしょう。
作業領域をサブ内に持たないように、参照側に定義してゆく方法。
外部参照を前提とする大域参照(障害情報の保存)ができないことがDLL化できない理由になっています。
専用の障害処理ルーチンを作れば別ですけど。https://www.slideshare.net/MoriharuOhzu/ss-14083300
な方々が、同じような処理をコピーするなというのです。

0954デフォルトの名無しさん2017/10/05(木) 22:14:41.62ID:NosQ3QuL
>>951
友有。遠方に居たり。友センターにて9割を取る博学なり。されど卒業するを能わず。
電算技術を学びたるも9割が中退す。
我5割なり。門にて脚切られたり。電算を学ぶ事能わず、4馬鹿カルテットの門に入る。
電算の夢追いて、野に下る。雅号を探せば文人の末席を汚すを知るなり。
我が電算技術は幼稚なり。人我を踏み越えて新譜を発表す。
時代の先端を征く者、時代には生きられぬ。
>>952
博物館で展示されているような、MS-DOS用ソフトのいくつかは、私が発表した内容の改良品です。
「これこれの機能はありません」と記載されていた「これこれ」は私が発表したものです。
発表から2年ぐらい遅れて申請されて特許になっていた処理方法もあったし、
こんなのやってますよ、って求人に来た某社人事部長に内容を話せば、「おかげで特許取れました」と、お茶菓子を持ってきたし。
「新しい方法を開発した」なんて、販促パンフに書いてあったソフトを買ったらば、電算課の教授陣が「(私のやり方は)無意味な方法だ」と罵倒していた方法だったりした。
同級会の帰りバスの中で「こんなソフトがあったらいいね」「お前描けよ」「英語を読まなきゃなんないからいやだ」と話していたら、だれかわからないですが、真剣に聞いていた人がいました。
この方法は発表されました。大学同窓会での会話から新規に開発されるソフトって結構多いです。

>>869 の指摘、一般教養の講義内容で、
>単精度ではおかしくなる。
倍精度を使って処理する方法があるけど、講義では単精度で対応する方法を教える
という内容があった。何かで大学教授の手記が記載されていて、
32bitでやるようにという課題に対して、大学のシステムには64ビット処理ライブラリーが登録されていないから実行不能である(課題に間違いがある)という回答があったこと
を嘆いていた内容があった。
この手の処理で、64ビット処理を自作してやった同級生(電算課以外)がいたのですが、大型を使っていたら、電算科教授に殴られたのです。
暴行を受けているような声が聞こえたので、電算室に飛び込んだらば、教授が出て行って、痛みをこらえている同級生がいました。
電算科の暴力教授なら、単精度でやらないと殴りつけていたね。今は昔。

0955片山博文MZ ◆T6xkBnTXz7B0 2017/10/05(木) 22:32:50.80ID:Xv32D2hU
>>953
ファイルマッピングを使えば、メモリー領域を共有できるよ。

0956片山博文MZ ◆T6xkBnTXz7B0 2017/10/05(木) 22:43:02.71ID:Xv32D2hU
DLLの共有セクションに変数やコードを入れれば、変数やコードを共有できるよ。
MSVCの場合は、
#pragma data_seg(".shared")
...
#pragma data_seg()
の中に変数を入れて
.defファイルに
SECTIONS
".shared" READ WRITE SHARED
と書いて、DLLのプロジェクトに.defファイルを追加する。

0957片山博文MZ ◆T6xkBnTXz7B0 2017/10/05(木) 22:57:50.83ID:Xv32D2hU

0958デフォルトの名無しさん2017/10/06(金) 00:07:58.97ID:4rQw4n+d
>>956
ちょこっとだけメモリ共有したいときいいよね
排他処理に InterlockedExchange なんかを使って

0959片山博文MZ ◆T6xkBnTXz7B0 2017/10/06(金) 00:17:07.07ID:u49AV52w
gcc/g++の場合は、__attribute__((section (".shared"),??shared))を使うんだった。

0960デフォルトの名無しさん2017/10/29(日) 16:13:05.10ID:9AFyIjHV
shcreatedirectoryexを無効化するにはどうしたら良いでしょうか?

0961片山博文MZ ◆T6xkBnTXz7B0 2017/10/29(日) 16:14:21.78ID:k1qoOab2
>>960
APIフック。

0962デフォルトの名無しさん2017/11/06(月) 16:32:15.17ID:vBzMORbG
PEヘッダについての質問ってどこですればいいですか?
スレチな気がします・・・けどお願いします

0963デフォルトの名無しさん2017/11/06(月) 19:45:55.24ID:6JLIEeFJ
聴き給へ

0964デフォルトの名無しさん2017/11/06(月) 21:00:51.96ID:vBzMORbG
ありがとうございます

APIフックのための仲介DLL作成ツールを使おうと思ったんですけどkernel32.dllやuser32.dllを引数に与えても動かなくて
エラーの内容見てみたらNumberOfRvaAndSizes=0って出ていて
調べてみるとディレクトリ配列の数を示すパラメータみたいなんでPE INFOをつかって見てみました
そうしたら、Directoriesの情報タブにはExportの内容が表示されていたのですがDirectories Exportのサイズは0でした

ここで疑問なんですが、Directoriesのパラメータ(Rva, Size)がPE Infoに表示されているのにディレクトリ配列の数が0になっているのはなぜでしょうか?
また、ExportディレクトリがSize=0ならエクスポート関数のリストはどこから来たんでしょうか?

そのソフトのソースを見てみると本来はディレクトリ配列の最初の要素からエクスポート関数のリストを得るものだったのですがそのようなメンバはない(というかディレクトリ配列の数が0)みたいです

どなたかわかりましたらよろしくお願いします

0965デフォルトの名無しさん2017/11/06(月) 23:03:33.39ID:9FNc82fk
手元にWindows環境がないので当てずっぽうに過ぎないが
dllがx64の奴だからと予想

0966デフォルトの名無しさん2017/11/06(月) 23:21:19.33ID:vBzMORbG
>>965
ありがとうございます、user「32」.dllとなっていたのでx86と同じだと思っていました
試してみたいですけど家に32bit環境ないですね・・・

0967デフォルトの名無しさん2017/11/07(火) 16:30:21.10ID:speVoQlz
wow64の中のを入れた?

0968デフォルトの名無しさん2017/11/08(水) 00:50:49.35ID:ZqGpDlPC
>>967

>>964です
wow64のなかにあったuser32.dllを使うと動きました、ありがとうございます!
できれば、なぜ64bit版としか思えないフォルダ名のなかのものなら動いたのか、そもそもwow64とsystem32の同名ファイルは何が違うのか教えていただけないでしょうか?

0969デフォルトの名無しさん2017/11/08(水) 00:59:31.38ID:ZqGpDlPC
すみません、ググったら出てきました
System32フォルダに入ってる方のdllが64bit用、wow64の中が32bit用という逆転があるんですね

教えていただいた方々ありがとうございました

0970片山博文MZ ◆T6xkBnTXz7B0 2017/11/08(水) 01:01:16.79ID:TZ5JAUzS
マイクロソフトは、64ビット環境で動くDLLをsystem32に格納し、32ビットのDLLをwow64に格納することにした。
32ビットと同じ名前なのは、互換性のため。詳しくはWin64APIについて調べるといい。

0971デフォルトの名無しさん2017/11/08(水) 01:01:34.79ID:0mQs8SG2
>>968
wow64 = Windows (32bit) on Windows 64bit
→32bit

system32 = 昔(32bit)の時のフォルダー名変更してないだけ
→64bit

0972デフォルトの名無しさん2017/11/08(水) 01:31:09.47ID:MEe7IGP8
systemのままで良かったよね

0973デフォルトの名無しさん2017/11/08(水) 03:22:35.44ID:pi2d/ZnM
32ビットはブームだったからなあ
そのくせProgram Filesはx86ってなんだよって感じ

0974デフォルトの名無しさん2017/11/08(水) 03:41:30.24ID:R0qhel/o
system32はWoW16でsystemを使ってたからねしょうがないね

0975デフォルトの名無しさん2017/11/08(水) 06:10:07.81ID:ZWKv78KM
>>969
w(32) on w64
の略だから逆転はしていない
紛らわしいネーミングだとは思うが
ディレクトリ名決め打ちの糞ソフトが
大量に出回ったあとだからやむを得ない

0976デフォルトの名無しさん2017/11/08(水) 18:38:40.88ID:ROkXXR0p
win32Windowsアプリって真っ白から作るんだな昔凄い量打ち込んでやっとウィンドウ出したのを思い出したわ・・・

0977デフォルトの名無しさん2017/11/08(水) 18:48:38.98ID:ZM9wnitb
main()から手打ちしてたのはwin3.1時代までだなw

0978デフォルトの名無しさん2017/11/08(水) 19:00:03.99ID:ROkXXR0p
>>977
今は基礎作ってくれるのか10年前だからな基礎作るだけで学校の午後の授業が半分使ったしw

0979デフォルトの名無しさん2017/11/08(水) 19:02:13.24ID:u5hLhTv2
10年前でも、WinMainから書いて無かったか?

0980デフォルトの名無しさん2017/11/08(水) 19:07:13.31ID:ROkXXR0p
書いてなかったねえprint貰って全部手書きで最初からウィンドウの幅構成とかカタカタ打ってたなそれか楽させないために空のファイルで作らされてたか

0981片山博文MZ ◆T6xkBnTXz7B0 2017/11/08(水) 19:09:52.22ID:TZ5JAUzS
今じゃWTLとかMFCとかが無料で使えるから、手作業は減っているはずだ。

https://github.com/katahiromz/MZC4

0982デフォルトの名無しさん2017/11/08(水) 20:59:58.61ID:ROkXXR0p
構成の仕方まだわからんから出来ない

0983デフォルトの名無しさん2017/11/08(水) 21:34:54.68ID:R0qhel/o
最後にWTLウィザード使ったのいつだろう?ってぐらいご無沙汰だわ

0984デフォルトの名無しさん2017/11/08(水) 23:59:13.54ID:S5satkVH
バッチプログラムから起動するかコマンドラインから起動するかで WinMain() アプリからの戻り方が違うのが困る、いまさらだが。

0985デフォルトの名無しさん2017/11/09(木) 00:24:21.64ID:UmTkKmYx
バッチで?

0986デフォルトの名無しさん2017/11/09(木) 03:45:53.03ID:5qwvxsG7
コマンドプロンプトやパワーシェル上から手入力でnotepad.exeと入力してメモ帳を起動すると、すぐに端末に制御が戻ってくる。

一方、以下の内容のように2回メモ帳を起動するbatファイルを作り実行すると一つ目のメモ帳が終わるまで待つことがわかる。
notepad.exe
notepad.exe

なお、windows10の場合、電卓calc.exeがユニバーサルWindowsプラットフォームのアプリなので
以下の内容のbatファイルからの起動でもすぐに制御が戻ってくるので電卓が2つ同時起動された状態になる。
calc.exe
calc.exe

ようするに、コンソールアプリ、Windowアプリ、ユニバーサルWindowsプラットフォームアプリの3種類でそれぞれ挙動が違う。

0987デフォルトの名無しさん2017/11/09(木) 04:18:01.90ID:OMOJ5BWv
昔はopenGLを使ってたんだったわ昔のプロジェクト起動したらおまじないがエラー起こしてた

0988デフォルトの名無しさん2017/11/09(木) 05:04:07.82ID:RrHmFgzV
コマンドプロンプト上でのバッチファイル実行の挙動はDOSの仕様(MS-DOS)

バッチファイルは順次に作動するように作られてるので、WIN32プロセスの
終了待機が行われる。
ユニバーサルアプリは、DOS窓がEXEの終了待機を処理できないだけ。
WIN32アプリも、作りによっては同じく終了待機できない可能性はある。

0989デフォルトの名無しさん2017/11/09(木) 05:06:38.10ID:RrHmFgzV
補足すると、exeの戻り値で処理を分けるっていうのはDOS時代よく行うことだったので、
終了待機しないと戻り値が取れなくて困る。

0990デフォルトの名無しさん2017/11/09(木) 10:21:19.15ID:5qwvxsG7
OSの正常なシャットダウンや再起動を妨げるクソなドライバー ZN200pcie.sys が悪名を轟かせている、
SKNET MonsterTV PCIE3 のドライバー追加・削除する時に処理をある程度自動化するため今もバッチ処理使ってる。
ドライバーを追加・削除するためのSKNET謹製アプリがGUIアプリなので終了を待ってくれないといろいろ困る。


set WAIT_EXE="C:\Program Files\Git\usr\bin\sleep.exe"
taskkill /F /IM MonsterTVLivePlayer.exe
taskkill /F /IM MonsterTVPlayer.exe
taskkill /F /IM MonsterTVMenu.exe
sc stop MonsterTVService
%WAIT_EXE% 3
PCIE3_win10_Driver\DriverInstall.exe <-- こいつがGUIアプリ。
sc start MonsterTVService
exit /B

0991デフォルトの名無しさん2017/11/09(木) 10:33:48.20ID:RrHmFgzV
PCIE3_win10_Driver\DriverInstall.exe の終了を待ちたいけど待ってくれないなら、
このスレ的にはそれを起動して終了を待つプログラムを組めばいいんじゃない?

0992デフォルトの名無しさん2017/11/09(木) 10:46:19.38ID:5qwvxsG7
>>991
失礼。質問したかったんじゃなくて、バッチがいまだ現役な例をあげた。
バッチでPCIE3_win10_Driver\DriverInstall.exe を終了待ちできてるので問題ない。

0993デフォルトの名無しさん2017/11/09(木) 11:23:34.26ID:UInw5/Yz
次スレよろ

0994デフォルトの名無しさん2017/11/09(木) 11:38:29.16ID:9lAepYsb
待ってくれないならループで待つようにすればいいだけの話だな

0995デフォルトの名無しさん2017/11/09(木) 16:34:53.73ID:3Mpnex4d
待っててくれないなら追いかければいいよ

0996デフォルトの名無しさん2017/11/11(土) 19:44:42.77ID:4LNBDgYy

0997デフォルトの名無しさん2017/11/12(日) 17:50:54.93ID:k+Q3OR2Q

0998デフォルトの名無しさん2017/11/12(日) 17:51:42.96ID:k+Q3OR2Q
なるほど新リンク先は 5ch がいいのか 2ch がいいのか
ようわからん
教えてけれ

0999片山博文MZ ◆T6xkBnTXz7B0 2017/11/12(日) 17:55:07.59ID:hcIx1LXl
>>998
将来的には5chに移行するから、5chがいい。

1000デフォルトの名無しさん2017/11/12(日) 18:27:23.43ID:C1sLEmf0
ラスト

10011001Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 400日 5時間 54分 21秒

10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php

レス数が1000を超えています。これ以上書き込みはできません。