HSPではないのですが、Visual Basic 6.0で、
他プロセスのコマンドライン引数を確認する必要があり、
こちらの掲示板のスレッド
http://hsp.tv/play/pforum.php?mode=pastwch&num=51676
に掲載された、Him様のサンプルソースを参考にさせていただきました。
その中で、
なるコードで、
ReadProcessMemory hProcess, ProcParamsAddress + 0x74, varptr(BlockAddress(1)), 4, 0
「RTL_USER_PROCESS_PARAMETERS構造体の先頭アドレスから0x74(=116)バイトめから、
コマンドラインデータの終端アドレスを取得する」
処理が存在します。
ここで疑問なのですが、
・この「0x74」なるオフセット値はどこから来たのか?
MicrosoftのヘルプなどでRTL_USER_PROCESS_PARAMETERSやそれに含まれるUNICODE_STRINGの
説明を見る限り、どう見てもRTL_USER_PROCESS_PARAMETERSは0x48バイトしかなく、0x74バイトめは
まるっきり外を見ているようにしか見えません。
(VB6に移植したソースで、実際にこの0x74オフセットで正常に終端が取れているのだから不思議です)
・上記スレッドのHim様のレスにあるリンク先ページを見ると、わざわざ終端アドレスを調べなくとも、
RTL_USER_PROCESS_PARAMETERSの0x40バイトめに、そのものズバリな「commandLine.Length」が
格納されています。なぜこちらを使っていないのでしょうか?
(どうしても不安が拭えなかったため、Him様には真に失礼ですが、今回納品したソースでは
0x40バイトめを参照してデータ長を取得しました)
以上、Him様もしくはどなたかお詳しい方、ご教示いただけないでしょうか?
※当方、VB、C#、MFC、ASP.NETMVCなどの実務経験はありますが、HSPは今回初めて見ました。
何か私の知らないHSPならではの制約が存在するかもしれません。
※今回のシステムは100本近いVB6製EXEファイルが密接に連携しており、サポートの切れていない言語環境への
移行は半永久的に不可能な状況です。