今C言語でファイルの所有者の取得を頑張っていますが、ユーザーのSIDを取得しそれをlookupusersid()(?)でユーザー名の取得ですが、このユーザーの場所、

今C言語でファイルの所有者の取得を頑張っていますが、ユーザーのSIDを取得しそれをlookupusersid()(?)でユーザー名の取得ですが、このユーザーの場所、 つまりコンピューター名を手軽に取得できる方法はありませんか? 自分なりに、調べてみたのですがよくわからずただコンピュータ名を取得してComputerName\UsernName(this computer)などと書いてもSYSTEMユーザーならその存在場所はBUILTINですし、不定です。またwindowsのファイルシステムでプロパティにthis computerと書いているところもまた、ユーザー名からコンピュータ名を取得し、それがこのコンピュータ名と同じかをwcscmpか何かで照合させて表示させていると思うし、ほかのコンピュータ名はこのコンピュータから取得できるのはファイルのメタデータでしか無理で、オフラインの中で他コンピュータ名を取得するのは不可能なので、ほかに関数があるのだろうと思いました。また、コンソールでの出力のデザインを考えるために「PropertySystemView」というソフトをダウンロードしてたくさんのデータが見れました。これらのプロパティ名の取得を頑張るだけなのですが、C#で取得しているみたいでsystem構造体なのでしょうか。これはsystem.fileownerはどのwin32apiをカバーしたものなのでしょうか。 長くなりましたが、どなたかご教授ください。お願いします。

補足

また、ファイルのパーミッションに「継承」というものが存在しますが、windowsの詳細なセキュリティ画面には親の継承元パスが記載されていますが、これはどんどん親ディレクトリに戻っていき同値のパーミッションが存在すればというわけではなさそうです。どのように取得しますか?またオブジェクト継承などのフラグは「pAce->Header.AceFlags」でフラグ取得からの&でビットフラグを取得するのですか?それですと、すべてオブジェクト継承になってしまいます。どうすればいいのでしょう。この二点も教えていただけないでしょうか。

ベストアンサー

0

質問の趣旨をちゃんと理解していないかもしれないので、頓珍漢な返信かもしれないけど。。。 よーするに、"whoami" コマンドで得られる結果と同じ情報を取得したいってことですか? だったら、デバッガ上で "whoami" コマンドを実行させて、それをライブ デバッグ トレースすれば、使用している API とパラメータにセットしている値を確認することができます。 デバッガでの解析手法を習得しておくと、色んな API の使い方が分かっちゃうので、とっても便利です。 (ただしこの手法はいわゆる「リバース エンジニアリング」になり、「それは法律で禁止されている!!」と文句をつけてくるノンテク エンジニアがいるので、要注意。www)

はい。同じですが、グループなどの一覧表示がまさにこのような表示でそのような表示にしたいのです。 やはり、あなた様はデバッグで行けますといいますよね、WinDbgをあれから入れてみたのですが、16進数の羅列でもっとリファレンスを見ればよかったのですが、1インスタンスごとに動作を止め、それからコマンドを送信するかGoするかのようですね。あれから関数名などの取得がよくわかりません。 確かにリバース エンジニアリングですが線引きは難しいですよね。僕はそんな法律は好奇心を削ぐだけだと思っていますので、そのような回答をされた方は無視したいと思います。 =====おい、違法しかいえない君たち===== うるせえ、、、、 ============================

ThanksImg質問者からのお礼コメント

二人とも、ソースコードやデバッグで教えていただきました。どちらからも有益な情報をいただけました。なのでBAはすごく悩ましかったのですが、デバッグは様々なアプリに応用できるのでこの方にBAにしたいと思います!お二人方本当にありがとうございました!

お礼日時:9/21 0:47

その他の回答(1件)

0

とりあえず、LookupAccountSid の LPCTSTR lpSystemName は、NULL にすれば Local PC を見に行くみたい。 https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-lookupaccountsida