//*************************************************************
//
//  profile.idl
//
//      Definition of IUserProfile interface.
//
//  History:
//
//      Created     weiruc      6/9/2000
//
//  Microsoft Confidential
//  Copyright (c) Microsoft Corporation 2000
//  All rights reserved
//
//*************************************************************


//
// IUserProfile loads and unloads a user's profile.
//

[
    uuid(326731e3-c1c0-4a69-ae20-7d9044a4ea5c),
    version(1.0),
    pointer_default(unique)
]

interface IUserProfile 
{
    import "import.idl";
    import "profinfo.h";

    typedef [context_handle] void *PCONTEXT_HANDLE;
    typedef [ref] PCONTEXT_HANDLE *PPCONTEXT_HANDLE;

    DWORD     DropClientContext([in] handle_t hBindHandle,
                                [in, unique]  LPPROFILEINFO  pProfileInfo,
                                [out] PPCONTEXT_HANDLE  pphContext);

    DWORD     LoadUserProfileI([in] handle_t hBindHandle,
                               [in, unique]  LPPROFILEINFO  pProfileInfo,
                               [in] PCONTEXT_HANDLE  phContext,
                               [in, string, unique] LPTSTR lpRPCEndPoint);

    DWORD     UnloadUserProfileI([in] handle_t hBindHandle,
                                 [in] PCONTEXT_HANDLE  phContext,
                                 [in, string, unique] LPTSTR  lpRPCEndPoint);

    void      ReleaseClientContext([in] handle_t hBindHandle,
                                   [in, out] PPCONTEXT_HANDLE  pphContext);      
	
    DWORD     EnterUserProfileLockRemote([in] handle_t hBindHandle,
                                         [in, string]	LPTSTR pSid);
	
    DWORD     LeaveUserProfileLockRemote([in] handle_t hBindHandle,
                                         [in, string] LPTSTR pSid);
}

//
// IProfileDialog provides interface for reporting error on client desktop
// All the interface functions implemented as async rpc
//

[
    uuid(4825ea41-51e3-4c2a-8406-8f2d2698395f),
    version(1.0),
    pointer_default(unique)
]

interface IProfileDialog {
    import "import.idl";
    import "profinfo.h";

    void     ErrorDialog([in] handle_t       hBindHandle,
                         [in] DWORD          dwTimeOut,
                         [in, string] LPTSTR lpErrMsg);

    void     SlowLinkDialog([in]  handle_t    hBindHandle,
                            [in]  DWORD       dwTimeOut,
                            [in]  BOOL        bDefault,
                            [out] BOOL        *bpResponse,
                            [in]  BOOL        bDlgLogin);
}