/////////////////////////////////////////////////////////////////////////////// // // Copyright (c) 1998, Microsoft Corp. All rights reserved. // // FILE // // acctinfo.h // // SYNOPSIS // // Declares the class AccountInfo. // // MODIFICATION HISTORY // // 10/21/1998 Original version. // /////////////////////////////////////////////////////////////////////////////// #ifndef _ACCTINFO_H_ #define _ACCTINFO_H_ #if _MSC_VER >= 1000 #pragma once #endif class LockoutKey; /////////////////////////////////////////////////////////////////////////////// // // CLASS // // AccountInfo // // DESCRIPTION // // // /////////////////////////////////////////////////////////////////////////////// class AccountInfo { public: // Open the AccountInfo object for a user. // Returns NULL if the lockout feature is disabled. static AccountInfo* open(PCWSTR domain, PCWSTR username) throw (); // Close an AccountInfo object; 'info' may be NULL. static void close(AccountInfo* info) throw (); // Accessors for user's domain and username. PCWSTR getDomain() const throw () { return identity; } PCWSTR getUserName() const throw () { return delim + 1; } // Increment the denial count. void incrementDenials() throw () { ++denials; persist(); } // Reset the denial count. void reset() throw () { denials = 0; persist(); } // Returns 'true' if the denial count is zero. bool isClean() const throw () { return denials == 0; } // Returns 'true' if the account is currently locked out. bool isLockedOut() const throw (); // Signals that the account's dial-in privilege has been revoked. This // should be called after the privilege has been successfully revoked in // the user's account database. void revoke() throw () { denials = DIALIN_REVOKED; persist(); } // Returns 'true' if the account's dial-in privilege has been revoked. bool isRevoked() const throw () { return denials == DIALIN_REVOKED; } // API lifecycle. static void initialize() throw (); static void finalize() throw (); protected: AccountInfo(PCWSTR domain, PCWSTR username) throw (); ~AccountInfo() throw (); // Persists the account data to the registry. void persist() throw (); enum { // Magic denial value that indicates dialin privilege has been revoked. DIALIN_REVOKED = MAXDWORD }; private: HKEY hKey; // Registry key for the account (if any). DWORD denials; // Number of denials recorded. PWCHAR delim; // Pointer to the delimeter in identity. WCHAR identity[1]; // Identity of the account. // Shared LockoutKey object. static LockoutKey root; // Not implemented. AccountInfo(const AccountInfo&); AccountInfo& operator=(const AccountInfo&); }; #endif // _ACCTINFO_H_