windows-nt/Source/XPSP1/NT/shell/osshell/encrypt/users.h
2020-09-26 16:20:57 +08:00

90 lines
2 KiB
C++

// Users.h: interface for the CUsers class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_USERS_H__FFCA99DE_56E0_11D1_BB65_00A0C906345D__INCLUDED_)
#define AFX_USERS_H__FFCA99DE_56E0_11D1_BB65_00A0C906345D__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include <winefs.h>
#define USERINFILE 1
#define USERADDED 2
#define USERREMOVED 4
typedef struct USERSONFILE {
USERSONFILE * Next;
DWORD Flag; // If the item is added, removed or existed in the file
PVOID Cert; // Either the hash or the Blob
PVOID Context; // Cert Context. To be released when the item is deleted.
LPTSTR UserName;
PSID UserSid;
} USERSONFILE, *PUSERSONFILE;
//
// This class supports single thread only.
//
class CUsers
{
public:
CUsers();
virtual ~CUsers();
public:
void Clear(void);
DWORD GetUserRemovedCnt();
DWORD GetUserAddedCnt();
DWORD Add(
LPTSTR UserName,
PVOID UserCert,
PSID UserSid = NULL,
DWORD Flag = USERINFILE,
PVOID Context = NULL
);
DWORD Add( CUsers &NewUsers );
PUSERSONFILE RemoveItemFromHead(void);
DWORD Remove(
LPCTSTR UserName
);
PVOID StartEnum();
PVOID GetNextUser(
PVOID Token,
CString &UserName,
CString &CertHash
);
PVOID GetNextChangedUser(
PVOID Token,
LPTSTR *UserName,
PSID *UserSid,
PVOID *CertData,
DWORD *Flag
);
void ConvertHashToStr(
PBYTE pHashData,
DWORD cbData,
LPWSTR OutHashStr
);
private:
DWORD m_UserAddedCnt;
DWORD m_UserRemovedCnt;
PUSERSONFILE m_UsersRoot;
};
#endif // !defined(AFX_USERS_H__FFCA99DE_56E0_11D1_BB65_00A0C906345D__INCLUDED_)