社本@元ネオニート Blog

社本@元ネオニート (元々ワック) のいたずら書き (for Programmers)

AILight Banner
AILight Blog

プロフィール

社本@元ネオニート Blog
働いたら負けかなと思っていたのですが。。とうとう働き始めました。アメリカのシアトル・エリアにある企業向けのバックアップソフトを開発している会社です。日本人は私だけ。なんとか。。やっていけてるようです。

目次

Blog 利用状況

記事分類

過去の記事

タグ

現在の(プロセスの)ユーザのSIDの取得 - Security

現在の(プロセスの)ユーザのSIDの取得方法です。

---
 // 現在の(プロセスの)ユーザのSIDの取得
 static CString GetCurrentProcessStringSid()
 {
  HANDLE hProcess = ::GetCurrentProcess();
  return CSidHelper::GetProcessStringSid(hProcess);
 }
 static CString GetProcessStringSid(HANDLE hProcess)
 {
  HANDLE hToken = NULL;
  BOOL br = ::OpenProcessToken(hProcess, TOKEN_QUERY, &hToken);
  if (!br)
  {
   return _T("");
  }

  CString strResult = CSidHelper::GetTokenStringSid(hToken);
  ::CloseHandle(hToken);

  return strResult;
 }
 static CString GetTokenStringSid(HANDLE hToken)
 {
  DWORD dwTokenUserLength = 0;
  ::GetTokenInformation(hToken , TokenUser , 0 , 0 , &dwTokenUserLength);

  TOKEN_USER* pTokenUser = (TOKEN_USER*)::LocalAlloc(LMEM_FIXED, dwTokenUserLength);
  if (pTokenUser == NULL)
  {
   return _T("");
  }

  BOOL br = ::GetTokenInformation(hToken, TokenUser, pTokenUser, dwTokenUserLength, &dwTokenUserLength);
  if (!br)
  {
   ::LocalFree(pTokenUser);
   return _T("");
  }

  CString strResult = CSidHelper::ConvertSidToStringSid(pTokenUser->User.Sid);
  ::LocalFree(pTokenUser);

  return strResult;
 }

 static CString ConvertSidToStringSid(PSID pSid)
 {
  LPTSTR p = NULL;
  BOOL br = ::ConvertSidToStringSid(pSid, &p);
  if (!br)
  {
   return _T("");
  }

  CString strResult = p;
  ::LocalFree(p);

  return strResult;
 }
---

投稿日時 : 2005年1月23日 6:29


コメントを追加

#  re: 現在の(プロセスの)ユーザのSIDの取得 2005年1月23日 10:41 渋木宏明(ひどり)

ATL7 には、CSid とか AtlGetXXXSid() なんかの SID のサポートが追加されているよね。

#  re: 現在の(プロセスの)ユーザのSIDの取得 2005年1月23日 20:12 社本@ワック

> ATL7 には、CSid とか AtlGetXXXSid() なんかの SID のサポートが追加されているよね。

ありますね。
当初は、この辺りを使おうと思ったのですが、あまり使い勝手がよくなかったもので。。

#  re: 現在の(プロセスの)ユーザのSIDの取得 2005年1月24日 2:41 渋木宏明(ひどり)

使いにくいんだ。。。>CSid 他
印刷と同じく、ACL も鬼門だね。
.NET 2.0 には ACL 関連のクラスも追加されるはず。。。

#  re: 現在の(プロセスの)ユーザのSIDの取得 2005年1月24日 5:48 社本@ワック

> .NET 2.0 には ACL 関連のクラスも追加されるはず。。。

.NET 2.0では、現状のWin32 APIで提供されているものは、一通り提供して欲しいよねえ。
んじゃないと、WinFX(.NET 3.0?)で、羽ばたけないw

ATL Serverのセキュリティ関連は、こんな(↓)カンジで揃ってます。

■セキュリティ クラス - ATL Server
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/vclrfsecurityclasses.asp
タイトル
名前
URL
コメント