2009-01-10

SECURITY_ATTRIBUTES.lpSecurityDescriptor 的使用

在 WinAPI:CreateFile 等函數中有個 SECURITY_ATTRIBUTES 可以用來控制文件的用戶訪問權限,但一直不知道SECURITY_ATTRIBUTES結構中的lpSecurityDescriptor如何設置,今天查了一下MSDN發現可以用函數:

BOOL WINAPI ConvertStringSecurityDescriptorToSecurityDescriptor(
  __in   LPCTSTR StringSecurityDescriptor,
  __in   DWORD StringSDRevision,
  __out  PSECURITY_DESCRIPTOR *SecurityDescriptor,
  __out  PULONG SecurityDescriptorSize
);
來設置pSa->lpSecurityDescriptor。
要使用該函數需要引入Sddl.h 頭文件,但 VC6 里面沒有這個頭文件。
還有個方法是自己 LoadLibrary => GetProcAddress 來取得:
ConvertStringSecurityDescriptorToSecurityDescriptor 在 Windows 2000 Professional 以上的 Advapi32.dll 中。
可以用以下代碼得到:
typedef BOOL (WINAPI *FN__CSSDTSD__) (
  IN LPCTSTR,
  IN DWORD,
  OUT PSECURITY_DESCRIPTOR *,
  OUT PULONG);

FN__CSSDTSD__ ConvertStringSecurityDescriptorToSecurityDescriptor = NULL;

//   SDDL   Version   information
#define SDDL_REVISION_1  1
#define SDDL_REVISION  SDDL_REVISION_1


void _initLIBS()
{
 HMODULE hAdvapi32 = ::LoadLibrary("Advapi32");
 if (hAdvapi32)
 {
  ConvertStringSecurityDescriptorToSecurityDescriptor =
   (FN__CSSDTSD__)::GetProcAddress(
    hAdvapi32,
    "ConvertStringSecurityDescriptorToSecurityDescriptorA");
 }
}

參考:
http://msdn.microsoft.com/en-us/library/ms717798.aspx
http://msdn.microsoft.com/en-us/library/aa379570%28VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/aa376401%28VS.85%29.aspx

//EOF

0 comments: