325 lines
12 KiB
Plaintext
325 lines
12 KiB
Plaintext
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
//
|
||
|
// File: shgina.h
|
||
|
//
|
||
|
// Contents: MIDL definitions for ILogonEnumUsers, ILogonUser, ILogonUserEnumNotifications,
|
||
|
// ILogonUserNotification
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
|
||
|
// TODO: Notes from BryanSt's code review of Reiner's check in.
|
||
|
// 1. #define DISPIDs in another file. ___id.h
|
||
|
// 2. Rename to lower case first letter of all APIs
|
||
|
// 3. Imple IObjectWithSite for security
|
||
|
// 4. Rename ILogonEnumUsers to LogonUsers (LogonUserCollection)
|
||
|
// 5. get_Domain() should return a INTDomain w/ get_name()
|
||
|
// 6. Break EnumFlags into ::put_sort() and ::put_filter()
|
||
|
// 7. Rename "Count" to "length" to be compatible with the new JavaScript OMs.
|
||
|
|
||
|
|
||
|
typedef enum ILUEOrder
|
||
|
{
|
||
|
ILEU_MOSTRECENT = 0,
|
||
|
ILEU_ALPHABETICAL = 1,
|
||
|
} ILUEORDER;
|
||
|
|
||
|
|
||
|
|
||
|
import "oaidl.idl";
|
||
|
import "ocidl.idl";
|
||
|
|
||
|
|
||
|
[
|
||
|
uuid(0A055C02-BABE-4480-BB7B-A8EC723CE9C0), // LIBID_SHGINALib
|
||
|
helpstring("SHGINA 1.0 Type Library"),
|
||
|
lcid(0x0000),
|
||
|
version(1.0)
|
||
|
]
|
||
|
library SHGINALib
|
||
|
{
|
||
|
importlib("stdole2.tlb");
|
||
|
|
||
|
/* TODO:
|
||
|
[
|
||
|
object,
|
||
|
uuid(60664CAF-AF0D-1001-A300-5C7D25FF22A0),
|
||
|
dual,
|
||
|
hidden,
|
||
|
helpstring("ILogonUserNotification Interface"),
|
||
|
oleautomation
|
||
|
]
|
||
|
interface ILogonUserNotification : IDispatch
|
||
|
{
|
||
|
// Properties
|
||
|
[id(1), propget, helpstring("Get the unique ID of the Notification.")]
|
||
|
HRESULT UniqueID([out, retval] BSTR* pbstr);
|
||
|
[id(2), propget, helpstring("Get the image associated with the notification.")]
|
||
|
HRESULT Image([out, retval] BSTR* pbstr);
|
||
|
[id(3), propget, helpstring("Get the text string associated with the notification.")]
|
||
|
HRESULT Text([out, retval] BSTR* pbstr);
|
||
|
[id(4), propget, helpstring("Get the URL string associated with the notification.")]
|
||
|
HRESULT URL([out, retval] BSTR* pbstr);
|
||
|
};
|
||
|
[
|
||
|
uuid(60664CAF-AF0D-0001-A300-5C7D25FF22A0),
|
||
|
helpstring("LogonUserNotification Class")
|
||
|
]
|
||
|
coclass LogonUserNotification
|
||
|
{
|
||
|
[default] interface ILogonUserNotification;
|
||
|
};
|
||
|
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
uuid(60664CAF-AF0D-1002-A300-5C7D25FF22A0),
|
||
|
dual,
|
||
|
hidden,
|
||
|
helpstring("ILogonUserEnumNotification Interface"),
|
||
|
oleautomation
|
||
|
]
|
||
|
interface ILogonUserEnumNotifications : IDispatch
|
||
|
{
|
||
|
// Properties
|
||
|
[id(1), propget, helpstring("Get the total number of user notifications.")]
|
||
|
HRESULT Count([out, retval] UINT* pcNotifications);
|
||
|
|
||
|
// Methods
|
||
|
[id(DISPID_VALUE), helpstring("Return a LogonUserNotification given the specified index.")]
|
||
|
HRESULT Item([in] VARIANT varUserID, [out, retval] ILogonUserNotification** ppUserNotification);
|
||
|
};
|
||
|
[
|
||
|
uuid(60664CAF-AF0D-0002-A300-5C7D25FF22A0),
|
||
|
helpstring("LogonUserEnumNotifications Class")
|
||
|
]
|
||
|
coclass LogonUserEnumNotifications
|
||
|
{
|
||
|
[default] interface ILogonUserEnumNotifications;
|
||
|
};
|
||
|
*/
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
uuid(60664CAF-AF0D-1003-A300-5C7D25FF22A0),
|
||
|
dual,
|
||
|
hidden,
|
||
|
helpstring("ILogonUser Interface"),
|
||
|
oleautomation
|
||
|
]
|
||
|
interface ILogonUser : IDispatch
|
||
|
{
|
||
|
// Properties
|
||
|
[id(1), propget, helpstring("Get the named user setting.")]
|
||
|
HRESULT setting([in] BSTR bstrName, [out, retval] VARIANT* pvarVal);
|
||
|
|
||
|
[id(1), propput, helpstring("Set the named user setting.")]
|
||
|
HRESULT setting([in] BSTR bstrName, [in] VARIANT varVal);
|
||
|
|
||
|
[id(2), propget, helpstring("Test whether the user is logged on.")]
|
||
|
HRESULT isLoggedOn([out, retval] VARIANT_BOOL* pbLoggedIn);
|
||
|
|
||
|
[id(3), propget, helpstring("Test whether the user requires a password.")]
|
||
|
HRESULT passwordRequired([out, retval] VARIANT_BOOL* pbPasswordRequired);
|
||
|
|
||
|
[id(4), propget, helpstring("Test whether the user has the interactive logon right.")]
|
||
|
HRESULT interactiveLogonAllowed([out, retval] VARIANT_BOOL* pbInteractiveLogonAllowed);
|
||
|
|
||
|
[id(5), propget, helpstring("Check whether the user's profile folder is private.")]
|
||
|
HRESULT isProfilePrivate([out, retval] VARIANT_BOOL* pbPrivate);
|
||
|
|
||
|
[id(6), propget, helpstring("Check whether the user has created a password reset disk.")]
|
||
|
HRESULT isPasswordResetAvailable([out, retval] VARIANT_BOOL* pbResetAvailable);
|
||
|
|
||
|
// Methods
|
||
|
[helpstring("Log the user onto the system with the given password.")]
|
||
|
HRESULT logon([in] BSTR pstrPassword, [out, retval] VARIANT_BOOL* pbRet);
|
||
|
|
||
|
[helpstring("Log the user off the system.")]
|
||
|
HRESULT logoff([out, retval] VARIANT_BOOL* pbRet);
|
||
|
|
||
|
[helpstring("Change the users password.")]
|
||
|
HRESULT changePassword([in] VARIANT varNewPassword, [in] VARIANT varOldPassword, [out, retval] VARIANT_BOOL* pbRet);
|
||
|
|
||
|
[helpstring("Set ACLs to make the user's profile folder private.")]
|
||
|
HRESULT makeProfilePrivate([in] VARIANT_BOOL bPrivate);
|
||
|
|
||
|
[helpstring("Get the email account name and number of unread messages.")]
|
||
|
HRESULT getMailAccountInfo([in] UINT uiAccountIndex, [out] VARIANT *pvarAccountName, [out] UINT *pcUnreadMessages);
|
||
|
|
||
|
/* TODO:
|
||
|
[helpstring("Return an ILogonUserEnumNotifications to enumerate all notifications associated with the user.")]
|
||
|
HRESULT EnumUserNotifications([out] ILogonUserEnumNotifications** ppEnumNotifications);
|
||
|
*/
|
||
|
};
|
||
|
[
|
||
|
uuid(60664CAF-AF0D-0003-A300-5C7D25FF22A0),
|
||
|
helpstring("LogonUser Class")
|
||
|
]
|
||
|
coclass ShellLogonUser
|
||
|
{
|
||
|
[default] interface ILogonUser;
|
||
|
};
|
||
|
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
uuid(60664CAF-AF0D-1004-A300-5C7D25FF22A0),
|
||
|
dual,
|
||
|
hidden,
|
||
|
helpstring("ILogonEnumUsers Interface"),
|
||
|
oleautomation
|
||
|
]
|
||
|
interface ILogonEnumUsers : IDispatch
|
||
|
{
|
||
|
// Properties
|
||
|
[id(1), propget, helpstring("Get the current domain we are enumerating users on.")]
|
||
|
HRESULT Domain([out, retval] BSTR* pbstr);
|
||
|
|
||
|
[id(1), propput, helpstring("Set the current domain we are enumerating users on.")]
|
||
|
HRESULT Domain([in] BSTR bstr);
|
||
|
|
||
|
[id(2), propget, helpstring("Get the current enumeration flags.")]
|
||
|
HRESULT EnumFlags([out, retval] ILUEORDER* porder);
|
||
|
|
||
|
[id(2), propput, helpstring("Set the current enumeration flags.")]
|
||
|
HRESULT EnumFlags([in] ILUEORDER order);
|
||
|
|
||
|
[id(3), propget, helpstring("Get the total number of users.")]
|
||
|
HRESULT length([out, retval] UINT* pcUsers);
|
||
|
|
||
|
[id(6), propget, helpstring("Get the current user.")]
|
||
|
HRESULT currentUser([out, retval] ILogonUser** ppLogonUserInfo);
|
||
|
|
||
|
// Methods
|
||
|
[id(DISPID_VALUE), helpstring("Return a LogonUser given the specified name/index.")]
|
||
|
HRESULT item([in] VARIANT varUserId, [out, retval] ILogonUser** ppLogonUserInfo);
|
||
|
|
||
|
[id(DISPID_NEWENUM), helpstring("Return an IEnumVARIANT ojbect for all of the users.")]
|
||
|
HRESULT _NewEnum([out, retval] IUnknown** retval);
|
||
|
|
||
|
[id(4), helpstring("Create a new user.")]
|
||
|
HRESULT create([in] BSTR bstrLoginName, [out, retval] ILogonUser **ppLogonUser);
|
||
|
|
||
|
[id(5), helpstring("Delete a user.")]
|
||
|
HRESULT remove([in] VARIANT varUserId, [in, optional] VARIANT varBackupPath, [out, retval] VARIANT_BOOL *pbSuccess);
|
||
|
|
||
|
};
|
||
|
[
|
||
|
uuid(60664CAF-AF0D-0004-A300-5C7D25FF22A0),
|
||
|
helpstring("LogonEnumUsers Class")
|
||
|
]
|
||
|
coclass ShellLogonEnumUsers
|
||
|
{
|
||
|
[default] interface ILogonEnumUsers;
|
||
|
};
|
||
|
|
||
|
|
||
|
typedef enum ILM_GUEST_FLAGS
|
||
|
{
|
||
|
ILM_GUEST_ACCOUNT = 0x00000000,
|
||
|
ILM_GUEST_INTERACTIVE_LOGON = 0x00000001,
|
||
|
ILM_GUEST_NETWORK_LOGON = 0x00000002,
|
||
|
} ILM_GUEST_FLAGS;
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
uuid(60664CAF-AF0D-1005-A300-5C7D25FF22A0),
|
||
|
dual,
|
||
|
hidden,
|
||
|
helpstring("ILocalMachine Interface"),
|
||
|
oleautomation
|
||
|
]
|
||
|
interface ILocalMachine : IDispatch
|
||
|
{
|
||
|
// Properties
|
||
|
[id(1), propget, helpstring("Get the machine name.")]
|
||
|
HRESULT MachineName([out, retval] VARIANT* pvarVal);
|
||
|
[id(2), propget, helpstring("Test whether the Guest account is enabled.")]
|
||
|
HRESULT isGuestEnabled([in] ILM_GUEST_FLAGS flags, [out, retval] VARIANT_BOOL* pbEnabled);
|
||
|
[id(3), propget, helpstring("Test whether friendly UI is enabled.")]
|
||
|
HRESULT isFriendlyUIEnabled([out, retval] VARIANT_BOOL* pbEnabled);
|
||
|
[id(3), propput, helpstring("Enable or disable friendly UI.")]
|
||
|
HRESULT isFriendlyUIEnabled([in] VARIANT_BOOL bEnabled);
|
||
|
[id(4), propget, helpstring("Test whether multiple users is enabled.")]
|
||
|
HRESULT isMultipleUsersEnabled([out, retval] VARIANT_BOOL* pbEnabled);
|
||
|
[id(4), propput, helpstring("Enable or disable multiple users.")]
|
||
|
HRESULT isMultipleUsersEnabled([in] VARIANT_BOOL bEnabled);
|
||
|
[id(5), propget, helpstring("Test whether remote connections are enabled.")]
|
||
|
HRESULT isRemoteConnectionsEnabled([out, retval] VARIANT_BOOL* pbEnabled);
|
||
|
[id(5), propput, helpstring("Enable or disable remote connections.")]
|
||
|
HRESULT isRemoteConnectionsEnabled([in] VARIANT_BOOL bEnabled);
|
||
|
[id(6), propget, helpstring("Get a well-known user account name.")]
|
||
|
HRESULT AccountName([in] VARIANT varAccount, [out, retval] VARIANT* pvarVal);
|
||
|
[id(7), propget, helpstring("Test whether the machine can be undocked.")]
|
||
|
HRESULT isUndockEnabled([out, retval] VARIANT_BOOL* pbEnabled);
|
||
|
[id(8), propget, helpstring("Test whether the machine can be shut down.")]
|
||
|
HRESULT isShutdownAllowed([out, retval] VARIANT_BOOL* pbEnabled);
|
||
|
[id(9), propget, helpstring("Test whether all network traffic will be treated as through it were local guest account.")]
|
||
|
HRESULT isGuestAccessMode([out, retval] VARIANT_BOOL* pbForceGuest);
|
||
|
[id(100), propget, helpstring("Test whether Offline Files is enabled.")]
|
||
|
HRESULT isOfflineFilesEnabled([out, retval] VARIANT_BOOL *pbEnabled);
|
||
|
|
||
|
// Methods
|
||
|
[id(10), helpstring("Turn Off Computer.")]
|
||
|
HRESULT TurnOffComputer(void);
|
||
|
[id(20), helpstring("Signal UI host failure.")]
|
||
|
HRESULT SignalUIHostFailure(void);
|
||
|
[id(30), helpstring("Allow external credentials.")]
|
||
|
HRESULT AllowExternalCredentials(void);
|
||
|
[id(31), helpstring("Request external credentials.")]
|
||
|
HRESULT RequestExternalCredentials(void);
|
||
|
[id(32), helpstring("Logon with external credentials.")]
|
||
|
HRESULT LogonWithExternalCredentials([in] BSTR pstrUsername, [in] BSTR pstrDomain, [in] BSTR pstrPassword, [out, retval] VARIANT_BOOL* pbRet);
|
||
|
[id(33), helpstring("Initiate interactive logon with credentials.")]
|
||
|
HRESULT InitiateInteractiveLogon([in] BSTR pstrUsername, [in] BSTR pstrDomain, [in] BSTR pstrPassword, [in] DWORD dwTimeout, [out, retval] VARIANT_BOOL* pbRet);
|
||
|
[id(40), helpstring("Undock Computer.")]
|
||
|
HRESULT UndockComputer(void);
|
||
|
[id(50), helpstring("Enable the Guest account for interactive and/or network logon.")]
|
||
|
HRESULT EnableGuest(ILM_GUEST_FLAGS flags);
|
||
|
[id(51), helpstring("Disable the Guest account for interactive and/or network logon.")]
|
||
|
HRESULT DisableGuest(ILM_GUEST_FLAGS flags);
|
||
|
};
|
||
|
|
||
|
[
|
||
|
uuid(60664CAF-AF0D-0005-A300-5C7D25FF22A0),
|
||
|
helpstring("LocalMachine Class")
|
||
|
]
|
||
|
coclass ShellLocalMachine
|
||
|
{
|
||
|
[default] interface ILocalMachine;
|
||
|
};
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
uuid(60664CAF-AF0D-1007-A300-5C7D25FF22A0),
|
||
|
dual,
|
||
|
hidden,
|
||
|
helpstring("ILogonStatusHost Interface"),
|
||
|
oleautomation
|
||
|
]
|
||
|
interface ILogonStatusHost : IDispatch
|
||
|
{
|
||
|
// Methods
|
||
|
[id(10), helpstring("Initialize.")]
|
||
|
HRESULT Initialize([in] HINSTANCE hInstance, [in] HWND hwndHost);
|
||
|
[id(11), helpstring("Window procedure helper.")]
|
||
|
HRESULT WindowProcedureHelper([in] HWND hwnd, [in] UINT uMsg, [in] VARIANT wParam, [in] VARIANT lParam);
|
||
|
[id(12), helpstring("UnInitialize.")]
|
||
|
HRESULT UnInitialize(void);
|
||
|
};
|
||
|
[
|
||
|
uuid(60664CAF-AF0D-0007-A300-5C7D25FF22A0),
|
||
|
helpstring("LogonStatusHost Class")
|
||
|
]
|
||
|
coclass ShellLogonStatusHost
|
||
|
{
|
||
|
[default] interface ILogonStatusHost;
|
||
|
};
|
||
|
|
||
|
};
|
||
|
|