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.
 
 
 
 
 
 

164 lines
4.8 KiB

/*****************************************************************************/
/* Copyright (c) 1999-2001 Microsoft Corporation, All Rights Reserved /
/*****************************************************************************/
/*
* CSid.h - header file for CSid class
*
* Created: 12-14-1997 by Sanjeev Surati
* (based on classes from Windows NT Security by Nik Okuntseff)
*/
#if !defined __CSID_H__
#define __CSID_H__
#include <comdef.h>
////////////////////////////////////////////////////////////////
//
// Class: CSid
//
// This class is intended to provide a wrapper for basic
// Windows NT SIDs (Security Identifiers). There is a
// possibility of a slight performance hit when instantiating
// one of these as it uses LookupAccountName and LookupAccountSid
// to initialize account information, and those calls can go
// out over the network to get their data.
//
////////////////////////////////////////////////////////////////
class CSid
{
// Constructors and destructor
public:
CSid();
CSid( PSID pSid, LPCTSTR pszComputerName = NULL );
CSid( PSID pSid, LPCTSTR pszComputerName, bool fLookup );
CSid( LPCTSTR pszDomainName, LPCTSTR pszName, LPCTSTR pszComputerName );
#ifndef UNICODE
CSid( LPCWSTR wstrDomainName, LPCWSTR wstrName, LPCWSTR wstrComputerName );
#endif
CSid( LPCTSTR pszAccountName, LPCTSTR pszComputerName = NULL );
CSid( const CSid &r_Sid );
~CSid( void );
// Public functions
public:
CSid & operator= ( const CSid & );
BOOL operator== ( const CSid & ) const;
void GetDomainAccountName( CHString& strName ) const;
CHString GetAccountName( void ) const;
WCHAR* GetAccountNameW( void ) const;
CHString GetDomainName( void ) const;
WCHAR* GetDomainNameW( void ) const;
CHString GetSidString( void ) const;
WCHAR* GetSidStringW( void ) const;
SID_NAME_USE GetAccountType( void ) const;
PSID GetPSid( void ) const;
DWORD GetLength( void ) const;
BOOL IsOK( void ) const;
BOOL IsValid( void ) const;
BOOL IsAccountTypeValid( void ) const;
DWORD GetError( void ) const;
static void StringFromSid( PSID psid, CHString& str );
static void StringFromSidW( PSID psid, WCHAR** pwstr );
#ifdef NTONLY
void DumpSid(LPCWSTR wstrFilename = NULL);
#endif
// Private data members
private:
PSID m_pSid; // Pointer to standard Win32 SID
SID_NAME_USE m_snuAccountType; // Type of SID
//CHString m_strSid; // Wind32 SID in human readable form
//WCHAR* m_wstrSid; // As above, for wchar support when UNICODE not defined
//WCHAR* m_wstrAccountName; // ibid.
//WCHAR* m_wstrDomainName; // ibid.
//CHString m_strAccountName; // Name of the account
//CHString m_strDomainName; // Domain name the account belongs to
_bstr_t m_bstrtSid;
_bstr_t m_bstrtAccountName;
_bstr_t m_bstrtDomainName;
DWORD m_dwLastError; // Last Error in the Sid;
DWORD InitFromAccountName( LPCTSTR pszAccountName, LPCTSTR pszComputerName );
DWORD InitFromAccountNameW( LPCWSTR wstrAccountName, LPCWSTR wstrComputerName );
DWORD InitFromSid( PSID pSid, LPCTSTR pszComputerName, bool fLookup = true );
};
inline BOOL CSid::IsOK( void ) const
{
return ( ERROR_SUCCESS == m_dwLastError );
}
inline DWORD CSid::GetError( void ) const
{
return m_dwLastError;
}
// Lets us know if the Sid is Valid
inline BOOL CSid::IsValid( void ) const
{
// If m_pSid is NULL, this will return FALSE.
// dw: However, doing it this way causes a first chance exception, so...
if (m_pSid != NULL)
return ::IsValidSid( m_pSid );
return FALSE;
}
inline BOOL CSid::IsAccountTypeValid( void ) const
{
// SID may be valid, and Lookup succeeded, but it may be of a type that isn't
// necessarily a user/group/alias.
return ( m_snuAccountType >= SidTypeUser && m_snuAccountType < SidTypeDeletedAccount );
}
inline SID_NAME_USE CSid::GetAccountType( void ) const
{
return m_snuAccountType;
}
inline CHString CSid::GetAccountName( void ) const
{
return ( CHString((LPCWSTR)m_bstrtAccountName) );
}
inline WCHAR* CSid::GetAccountNameW( void ) const
{
return ( m_bstrtAccountName );
}
inline CHString CSid::GetDomainName( void ) const
{
return ( CHString((LPCWSTR)m_bstrtDomainName) );
}
inline WCHAR* CSid::GetDomainNameW( void ) const
{
return ( m_bstrtDomainName );
}
inline CHString CSid::GetSidString( void ) const
{
return ( CHString((LPCWSTR)m_bstrtSid) );
}
inline WCHAR* CSid::GetSidStringW( void ) const
{
return ( m_bstrtSid );
}
inline PSID CSid::GetPSid( void ) const
{
return ( m_pSid );
}
#endif // __CSID_H__