Source code of Windows XP (NT5)
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.
|
|
// --------------------------------------------------------------------------
// Module Name: CredentialTransfer.h
//
// Copyright (c) 2001, Microsoft Corporation
//
// Classes to handle credential transfer from one winlogon to another.
//
// History: 2001-01-11 vtan created
// --------------------------------------------------------------------------
#ifndef _CredentialTransfer_
#define _CredentialTransfer_
#include <ginaipc.h>
#include "Thread.h"
// --------------------------------------------------------------------------
// CCredentials
//
// Purpose: Class to manage marshalling of credentials into a block of
// memory that can be used in a named pipe.
//
// History: 2001-01-12 vtan created
// --------------------------------------------------------------------------
class CCredentials { private: typedef struct _CREDENTIALS { DWORD dwSize; unsigned char ucPasswordSeed; UNICODE_STRING username; UNICODE_STRING domain; UNICODE_STRING password; } CREDENTIALS, *PCREDENTIALS; private: CCredentials (void); ~CCredentials (void); public: static NTSTATUS OpenConduit (HANDLE *phPipe); static NTSTATUS CreateConduit (LPSECURITY_ATTRIBUTES pSecurityAttributes, HANDLE *phPipe); static NTSTATUS ClearConduit (void);
static NTSTATUS Pack (LOGONIPC_CREDENTIALS *pLogonIPCCredentials, void* *ppvData, DWORD *pdwDataSize); static NTSTATUS Unpack (void *pvData, LOGONIPC_CREDENTIALS *pLogonIPCCredentials);
static NTSTATUS StaticInitialize (bool fCreate); static NTSTATUS StaticTerminate (void); private: static NTSTATUS GetConduitName (TCHAR *pszName, DWORD dwNameSize); static NTSTATUS SetConduitName (const TCHAR *pszName); static NTSTATUS ClearConduitName (void); static NTSTATUS CreateConduitName (DWORD dwNumber, TCHAR *pszName); private: static HKEY s_hKeyCredentials; static const TCHAR s_szCredentialKeyName[]; static const TCHAR s_szCredentialValueName[]; };
// --------------------------------------------------------------------------
// CCredentialServer
//
// Purpose: Class to manage the server side of handing credentials from
// one winlogon to another.
//
// History: 2001-01-11 vtan created
// --------------------------------------------------------------------------
class CCredentialServer : public CThread { private: CCredentialServer (void); CCredentialServer (DWORD dwTimeout, LOGONIPC_CREDENTIALS *pLogonIPCCredentials); virtual ~CCredentialServer (void); public: bool IsReady (void) const;
static NTSTATUS Start (LOGONIPC_CREDENTIALS *pLogonIPCCredentials, DWORD dwWaitTime); static NTSTATUS Start (const WCHAR *pszUsername, const WCHAR *pszDomain, WCHAR *pszPassword, DWORD dwWaitTime); protected: virtual DWORD Entry (void); private: void ExecutePrematureTermination (void);
static void CALLBACK CB_APCProc (ULONG_PTR dwParam); static void CALLBACK CB_FileIOCompletionRoutine (DWORD dwErrorCode, DWORD dwNumberOfBytesTransferred, LPOVERLAPPED lpOverlapped); private: DWORD _dwTimeout; bool _fTerminate; HANDLE _hPipe; OVERLAPPED _overlapped; void* _pvData; DWORD _dwSize; };
// --------------------------------------------------------------------------
// CCredentialClient
//
// Purpose: Class to manage the client side of handing credentials from
// one winlogon to another.
//
// History: 2001-01-11 vtan created
// --------------------------------------------------------------------------
class CCredentialClient { private: CCredentialClient (void); ~CCredentialClient (void); public: static NTSTATUS Get (LOGONIPC_CREDENTIALS *pLogonIPCCredentials); };
#endif /* _CredentialTransfer_ */
|