Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.1 KiB

  1. //
  2. // csecattr.h
  3. //
  4. #ifndef CSECATTR_H
  5. #define CSECATTR_H
  6. #include <Sddl.h>
  7. BOOL CreateProperSecurityDescriptor(HANDLE hToken, PSECURITY_DESCRIPTOR *ppsdec);
  8. class CCicSecAttr
  9. {
  10. public:
  11. CCicSecAttr()
  12. {
  13. memset(&_sa, 0, sizeof(_sa));
  14. _psdec = NULL;
  15. _fInit = FALSE;
  16. }
  17. ~CCicSecAttr()
  18. {
  19. if (_psdec)
  20. {
  21. LocalFree(_psdec);
  22. _psdec = NULL;
  23. }
  24. _fInit = FALSE;
  25. }
  26. operator PSECURITY_ATTRIBUTES()
  27. {
  28. if (_fInit)
  29. return &_sa;
  30. HANDLE hToken = NULL;
  31. OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken);
  32. if (hToken)
  33. {
  34. if (CreateProperSecurityDescriptor(hToken, &_psdec))
  35. {
  36. _sa.nLength = sizeof(_sa);
  37. _sa.lpSecurityDescriptor = _psdec;
  38. _fInit = TRUE;
  39. }
  40. CloseHandle(hToken);
  41. }
  42. if (!_fInit)
  43. return NULL;
  44. return &_sa;
  45. }
  46. private:
  47. BOOL _fInit;
  48. SECURITY_ATTRIBUTES _sa;
  49. PSECURITY_DESCRIPTOR _psdec;
  50. };
  51. #endif // CSECATTR_H