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.
77 lines
1.7 KiB
77 lines
1.7 KiB
#pragma once
|
|
|
|
#include "mischlpr.h"
|
|
|
|
#include <winsta.h>
|
|
|
|
// In between _CoGetCallingUserHKCU and _CoCloseCallingUserHKCU
|
|
// we impersonate the calling user
|
|
|
|
// phThreadToken is out only
|
|
HRESULT _CoGetCallingUserHKCU(HANDLE* phThreadToken, HKEY* phkey);
|
|
HRESULT _CoCloseCallingUserHKCU(HANDLE hThreadToken, HKEY hkey);
|
|
|
|
HRESULT _GetCurrentUserHKCU(HANDLE* phThreadToken, HKEY* phkey);
|
|
HRESULT _CloseCurrentUserHKCU(HANDLE hThreadToken, HKEY hkey);
|
|
|
|
HRESULT _CoCreateInstanceInConsoleSession(REFCLSID rclsid,
|
|
IUnknown* punkOuter, DWORD dwClsContext, REFIID riid, void** ppv);
|
|
|
|
HRESULT _GiveAllowForegroundToConsoleShell();
|
|
|
|
class CImpersonateBase
|
|
{
|
|
public:
|
|
virtual HRESULT Impersonate() = 0;
|
|
virtual HRESULT RevertToSelf() = 0;
|
|
};
|
|
|
|
class CImpersonateTokenBased : public CImpersonateBase
|
|
{
|
|
public:
|
|
CImpersonateTokenBased();
|
|
virtual ~CImpersonateTokenBased();
|
|
|
|
public:
|
|
HRESULT Impersonate();
|
|
HRESULT RevertToSelf();
|
|
|
|
protected:
|
|
virtual HRESULT _GetToken(HANDLE* phToken) = 0;
|
|
|
|
private:
|
|
HRESULT _RevertToSelf();
|
|
|
|
private:
|
|
|
|
HANDLE _hToken;
|
|
};
|
|
|
|
class CImpersonateConsoleSessionUser : public CImpersonateTokenBased
|
|
{
|
|
protected:
|
|
HRESULT _GetToken(HANDLE* phToken);
|
|
};
|
|
|
|
class CImpersonateEveryone : public CImpersonateTokenBased, public CRefCounted
|
|
{
|
|
protected:
|
|
HRESULT _GetToken(HANDLE* phToken);
|
|
};
|
|
|
|
class CImpersonateCOMCaller : public CImpersonateBase
|
|
{
|
|
public:
|
|
CImpersonateCOMCaller();
|
|
~CImpersonateCOMCaller();
|
|
|
|
public:
|
|
HRESULT Impersonate();
|
|
HRESULT RevertToSelf();
|
|
|
|
private:
|
|
HRESULT _RevertToSelf();
|
|
|
|
private:
|
|
BOOL _fImpersonating;
|
|
};
|