home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / winwlx.h < prev    next >
C/C++ Source or Header  |  1998-04-25  |  23KB  |  716 lines

  1. /*++ BUILD Version: 0001    Increment this if a change has global effects
  2.  
  3. Copyright (c) 1985-1997, Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     winwlx.h
  8.  
  9. Abstract:
  10.  
  11.     WLX == WinLogon eXtension
  12.  
  13.     This file contains definitions, data types, and routine prototypes
  14.     necessary to produce a replacement Graphical Identification aNd
  15.     Authentication (GINA) DLL for Winlogon.
  16.  
  17. Author:
  18.  
  19.     Richard Ward (RichardW) and Jim Kelly (JimK) May-1994
  20.  
  21. Revision History:
  22.  
  23.  
  24.  
  25. --*/
  26.  
  27. #ifndef _WINWLX_
  28. #define _WINWLX_
  29.  
  30.  
  31.  
  32. ////////////////////////////////////////////////////////////////////////
  33. //                                                                    //
  34. //  #defines                                                          //
  35. //                                                                    //
  36. ////////////////////////////////////////////////////////////////////////
  37.  
  38.  
  39. /////////////////////////////////////////////////////////////////////////
  40. /////////////////////////////////////////////////////////////////////////
  41. //
  42. // Revisions of Winlogon API available for use by GINAs
  43. // Version is two parts: Major revision and minor revision.
  44. // Major revision is the upper 16-bits, minor is the lower
  45. // 16-bits.
  46. //
  47.  
  48. #define WLX_VERSION_1_0             (0X00010000)
  49. #define WLX_VERSION_1_1             (0X00010001)
  50. #define WLX_CURRENT_VERSION         (WLX_VERSION_1_1)
  51.  
  52.  
  53. /////////////////////////////////////////////////////////////////////////
  54. /////////////////////////////////////////////////////////////////////////
  55. //
  56. // Secure attention sequence types
  57. // These values are passed to routines that have a dwSasType
  58. // parameter.
  59. //
  60. //  ALL VALUES FROM 0 TO 127 ARE RESERVED FOR MICROSOFT DEFINITION.
  61. //  VALUES ABOVE 127 ARE RESERVED FOR CUSTOMER DEFINITION.
  62. //
  63. //      CTRL_ALT_DEL - used to indicate that the standard ctrl-alt-del
  64. //          secure attention sequence has been entered.
  65. //
  66. //      SCRNSVR_TIMEOUT - used to indicate that keyboard/mouse inactivity
  67. //          has lead to a screensaver activation.  It is up to the GINA
  68. //          DLL whether this constitutes a workstation locking event.
  69. //
  70. //      SCRNSVR_ACTIVITY - used to indicate that keyboard or mouse
  71. //          activity occured while a secure screensaver was active.
  72. //
  73.  
  74. #define WLX_SAS_TYPE_TIMEOUT                    (0)
  75. #define WLX_SAS_TYPE_CTRL_ALT_DEL               (1)
  76. #define WLX_SAS_TYPE_SCRNSVR_TIMEOUT            (2)
  77. #define WLX_SAS_TYPE_SCRNSVR_ACTIVITY           (3)
  78. #define WLX_SAS_TYPE_USER_LOGOFF                (4)
  79. #define WLX_SAS_TYPE_MAX_MSFT_VALUE             (127)
  80.  
  81.  
  82.  
  83.  
  84.  
  85. /////////////////////////////////////////////////////////////////////////
  86. /////////////////////////////////////////////////////////////////////////
  87. //
  88. // Upon successful logon, the GINA DLL may specify any of the following
  89. // options to Winlogon (via the dwOptions parameter of the WlxLoggedOutSas()
  90. // api).  When set, these options specify:
  91. //
  92. //      NO_PROFILE - Winlogon must NOT load a profile for the logged
  93. //                   on user.  Either the GINA DLL will take care of
  94. //                   this activity, or the user does not need a profile.
  95. //
  96. // USE_GROUPPOLICY - Apply group policy templates to the user.
  97. //
  98.  
  99. #define WLX_LOGON_OPT_NO_PROFILE        (0x00000001)
  100. #define WLX_LOGON_OPT_USE_GROUPPOLICY   (0x00000002)
  101.  
  102.  
  103.  
  104. /////////////////////////////////////////////////////////////////////////
  105. /////////////////////////////////////////////////////////////////////////
  106. //
  107. // GINA DLLs are expected to return account information to Winlogon
  108. // following a successful logon.  This information allows Winlogon
  109. // to support profile loading and supplemental network providers.
  110. //
  111. // To allow different sets of profile information to be returned
  112. // by GINAs over time, the first DWORD of each profile structure
  113. // is expected to contain a type-identifier.  The following constants
  114. // are the defined profile type identifiers.
  115. //
  116.  
  117. //
  118. // Standard profile is V2_0
  119. //
  120.  
  121. #define WLX_PROFILE_TYPE_V1_0           (1)
  122. #define WLX_PROFILE_TYPE_V2_0           (2)
  123.  
  124.  
  125.  
  126.  
  127. /////////////////////////////////////////////////////////////////////////
  128. /////////////////////////////////////////////////////////////////////////
  129. //
  130. // WlxLoggedOnSas() and WlxWkstaLockedSas() return an action
  131. // value to Winlogon directing Winlogon to either remain unchanged
  132. // or to perform some action (such as force-log the user off).
  133. // These are the values that may be returned.  Note, however, that
  134. // not all of the values may be returned by both of these api.  See
  135. // the description of each api to see which values are expected from
  136. // each.
  137. //
  138. //  LOGON              - User has logged on
  139. //  NONE               - Don't change the state of the window station.
  140. //  LOCK_WKSTA         - Lock the workstation, wait for next SAS.
  141. //  LOGOFF             - Log the user off of the workstation.
  142. //  SHUTDOWN           - Log the user off and shutdown the machine.
  143. //  PWD_CHANGED        - Indicates that the user changed their password.  Notify network providers.
  144. //  TASKLIST           - Invoke the task list.
  145. //  UNLOCK_WKSTA       - Unlock the workstation.
  146. //  FORCE_LOGOFF       - Forcibly log the user off.
  147. //  SHUTDOWN_POWER_OFF - Turn off machine after shutting down.
  148. //  SHUTDOWN_REBOOT    - Reboot machine after shutting down.
  149. //  SHUTDOWN_SLEEP     - Put the machine to sleep
  150. //  SHUTDOWN_SLEEP2    - Put the machine to sleep and disable wakeup events
  151. //  SHUTDOWN_HIBERNATE - Hibernate the machine
  152. //
  153.  
  154. #define WLX_SAS_ACTION_LOGON                        (1)
  155. #define WLX_SAS_ACTION_NONE                         (2)
  156. #define WLX_SAS_ACTION_LOCK_WKSTA                   (3)
  157. #define WLX_SAS_ACTION_LOGOFF                       (4)
  158. #define WLX_SAS_ACTION_SHUTDOWN                     (5)
  159. #define WLX_SAS_ACTION_PWD_CHANGED                  (6)
  160. #define WLX_SAS_ACTION_TASKLIST                     (7)
  161. #define WLX_SAS_ACTION_UNLOCK_WKSTA                 (8)
  162. #define WLX_SAS_ACTION_FORCE_LOGOFF                 (9)
  163. #define WLX_SAS_ACTION_SHUTDOWN_POWER_OFF           (10)
  164. #define WLX_SAS_ACTION_SHUTDOWN_REBOOT              (11)
  165. #define WLX_SAS_ACTION_SHUTDOWN_SLEEP               (12)
  166. #define WLX_SAS_ACTION_SHUTDOWN_SLEEP2              (13)
  167. #define WLX_SAS_ACTION_SHUTDOWN_HIBERNATE           (14)
  168.  
  169.  
  170. ////////////////////////////////////////////////////////////////////////
  171. //                                                                    //
  172. //  Window Messages                                                   //
  173. //                                                                    //
  174. ////////////////////////////////////////////////////////////////////////
  175.  
  176. //
  177. // The WM_SAS is defined as follows
  178. //
  179. //  The wParam parameter has the SAS Type (above)
  180.  
  181. #define WLX_WM_SAS                  (WM_USER + 601)
  182.  
  183.  
  184. //
  185. // Dialog return values
  186. //
  187. // These may be returned by dialogs started by a GINA dll.
  188. //
  189. #define WLX_DLG_SAS                     101
  190. #define WLX_DLG_INPUT_TIMEOUT           102     // Input (keys, etc) timed out
  191. #define WLX_DLG_SCREEN_SAVER_TIMEOUT    103     // Screen Saver activated
  192. #define WLX_DLG_USER_LOGOFF             104     // User logged off
  193.  
  194.  
  195.  
  196.  
  197. ////////////////////////////////////////////////////////////////////////
  198. //                                                                    //
  199. //  #data types                                                       //
  200. //                                                                    //
  201. ////////////////////////////////////////////////////////////////////////
  202.  
  203. /////////////////////////////////////////////////////////////////////////
  204. /////////////////////////////////////////////////////////////////////////
  205. //
  206. // The WLX_PROFILE_* structure is returned from a GINA DLL
  207. // following authentication.  This information is used by Winlogon
  208. // to support supplemental Network Providers and to load the
  209. // newly logged-on user's profile.
  210. //
  211. // Winlogon is responsible for freeing both the profile structure
  212. // and the fields within the structure that are marked as separately
  213. // deallocatable.
  214. //
  215.  
  216. typedef struct _WLX_PROFILE_V1_0 {
  217.  
  218.     //
  219.     // This field identifies the type of profile being returned by a
  220.     // GINA DLL.  Profile types are defined with the prefix
  221.     // WLX_PROFILE_TYPE_xxx.  It allows Winlogon to typecast the
  222.     // structure so the remainder of the structure may be referenced.
  223.     //
  224.  
  225.     DWORD               dwType;
  226.  
  227.  
  228.  
  229.     //
  230.     // pathname of profile to load for user.
  231.     //
  232.     // The buffer pointed to by this field must be separately allocated.
  233.     // Winlogon will free the buffer when it is no longer needed.
  234.     //
  235.     //
  236.     PWSTR               pszProfile;
  237.  
  238. } WLX_PROFILE_V1_0, * PWLX_PROFILE_V1_0;
  239.  
  240.  
  241. typedef struct _WLX_PROFILE_V2_0 {
  242.  
  243.     //
  244.     // This field identifies the type of profile being returned by a
  245.     // GINA DLL.  Profile types are defined with the prefix
  246.     // WLX_PROFILE_TYPE_xxx.  It allows Winlogon to typecast the
  247.     // structure so the remainder of the structure may be referenced.
  248.     //
  249.  
  250.     DWORD               dwType;
  251.  
  252.  
  253.  
  254.     //
  255.     // pathname of profile to load for user.
  256.     //
  257.     // This parameter can be NULL.  If so, the user has a local
  258.     // profile only.
  259.     //
  260.     // The buffer pointed to by this field must be separately allocated.
  261.     // Winlogon will free the buffer when it is no longer needed.
  262.     //
  263.     //
  264.  
  265.     PWSTR               pszProfile;
  266.  
  267.  
  268.  
  269.     //
  270.     // pathname of policy to load for user.
  271.     //
  272.     // This parameter can be NULL which prevents network wide policy
  273.     // from being applied.
  274.     //
  275.     // The buffer pointed to by this field must be separately allocated.
  276.     // Winlogon will free the buffer when it is no longer needed.
  277.     //
  278.     //
  279.  
  280.     PWSTR               pszPolicy;
  281.  
  282.  
  283.     //
  284.     // pathname of network default user profile
  285.     //
  286.     // This parameter can be NULL, which causes the Default User
  287.     // profile on the local machine to be used.
  288.     //
  289.     // The buffer pointed to by this field must be separately allocated.
  290.     // Winlogon will free the buffer when it is no longer needed.
  291.     //
  292.     //
  293.  
  294.     PWSTR               pszNetworkDefaultUserProfile;
  295.  
  296.  
  297.     //
  298.     // name of the server which validated the user account
  299.     //
  300.     // This is used to enumerate globals groups the user belongs
  301.     // to for policy support.  This parameter can be NULL.
  302.     //
  303.     // The buffer pointed to by this field must be separately allocated.
  304.     // Winlogon will free the buffer when it is no longer needed.
  305.     //
  306.     //
  307.  
  308.     PWSTR               pszServerName;
  309.  
  310.  
  311.     //
  312.     // pointer to a series of null terminated environment variables
  313.     //
  314.     // envname=environment variable value
  315.     //   - or -
  316.     // envname=%OtherVar%\more text
  317.     //
  318.     // Each environment variable is NULL terminated with the last
  319.     // environment variable double NULL terminated.  These variables
  320.     // are set into the user's initial environment.  The environment
  321.     // variable value can contain other environment variables wrapped
  322.     // in "%" signs. This parameter can be NULL.
  323.     //
  324.     // The buffer pointed to by this field must be separately allocated.
  325.     // Winlogon will free the buffer when it is no longer needed.
  326.     //
  327.     //
  328.  
  329.     PWSTR               pszEnvironment;
  330.  
  331. } WLX_PROFILE_V2_0, * PWLX_PROFILE_V2_0;
  332.  
  333.  
  334.  
  335. /////////////////////////////////////////////////////////////////////////
  336. /////////////////////////////////////////////////////////////////////////
  337. //
  338. // The WLX_NPR_NOTIFICATION_INFO structure is returned
  339. // from a GINA DLL following successful authentication.
  340. // This information is used by Winlogon to provide
  341. // identification and authentication information already
  342. // collected to network providers.  Winlogon is
  343. // responsible for freeing both the main structure and all
  344. // string and other buffers pointed to from within the
  345. // structure.
  346. //
  347.  
  348. typedef struct _WLX_MPR_NOTIFY_INFO {
  349.  
  350.     //
  351.     // The name of the account logged onto (e.g. REDMOND\Joe).
  352.     // The string pointed to by this field must be separately
  353.     // allocated and will be separately deallocated by Winlogon.
  354.     //
  355.  
  356.     PWSTR           pszUserName;
  357.  
  358.     //
  359.     // The string pointed to by this field must be separately
  360.     // allocated and will be separately deallocated by Winlogon.
  361.     //
  362.  
  363.     PWSTR           pszDomain;
  364.  
  365.     //
  366.     // Cleartext password of the user account.  If the OldPassword
  367.     // field is non-null, then this field contains the new password
  368.     // in a password change operation.  The string pointed to by
  369.     // this field must be separately allocated and will be seperately
  370.     // deallocated by Winlogon.
  371.     //
  372.  
  373.     PWSTR           pszPassword;
  374.  
  375.     //
  376.     // Cleartext old password of the user account whose password
  377.     // has just been changed.  The Password field contains the new
  378.     // password.  The string pointed to by this field must be
  379.     // separately allocated and will be separately deallocated by
  380.     // Winlogon.
  381.     //
  382.  
  383.     PWSTR           pszOldPassword;
  384.  
  385. } WLX_MPR_NOTIFY_INFO, * PWLX_MPR_NOTIFY_INFO;
  386.  
  387.  
  388.  
  389.  
  390.  
  391. ////////////////////////////////////////////////////////////////////////
  392. //                                                                    //
  393. //  Services that replacement GINAs   ** MUST ** provide              //
  394. //                                                                    //
  395. ////////////////////////////////////////////////////////////////////////
  396.  
  397.  
  398.  
  399. BOOL
  400. WINAPI
  401. WlxNegotiate(
  402.     DWORD                   dwWinlogonVersion,
  403.     PDWORD                  pdwDllVersion
  404.     );
  405.  
  406. BOOL
  407. WINAPI
  408. WlxInitialize(
  409.     LPWSTR                  lpWinsta,
  410.     HANDLE                  hWlx,
  411.     PVOID                   pvReserved,
  412.     PVOID                   pWinlogonFunctions,
  413.     PVOID *                 pWlxContext
  414.     );
  415.  
  416. VOID
  417. WINAPI
  418. WlxDisplaySASNotice(
  419.     PVOID                   pWlxContext
  420.     );
  421.  
  422.  
  423. int
  424. WINAPI
  425. WlxLoggedOutSAS(
  426.     PVOID                   pWlxContext,
  427.     DWORD                   dwSasType,
  428.     PLUID                   pAuthenticationId,
  429.     PSID                    pLogonSid,
  430.     PDWORD                  pdwOptions,
  431.     PHANDLE                 phToken,
  432.     PWLX_MPR_NOTIFY_INFO    pNprNotifyInfo,
  433.     PVOID *                 pProfile
  434.     );
  435.  
  436. BOOL
  437. WINAPI
  438. WlxActivateUserShell(
  439.     PVOID                   pWlxContext,
  440.     PWSTR                   pszDesktopName,
  441.     PWSTR                   pszMprLogonScript,
  442.     PVOID                   pEnvironment
  443.     );
  444.  
  445. int
  446. WINAPI
  447. WlxLoggedOnSAS(
  448.     PVOID                   pWlxContext,
  449.     DWORD                   dwSasType,
  450.     PVOID                   pReserved
  451.     );
  452.  
  453. VOID
  454. WINAPI
  455. WlxDisplayLockedNotice(
  456.     PVOID                   pWlxContext
  457.     );
  458.  
  459. int
  460. WINAPI
  461. WlxWkstaLockedSAS(
  462.     PVOID                   pWlxContext,
  463.     DWORD                   dwSasType
  464.     );
  465.  
  466. BOOL
  467. WINAPI
  468. WlxIsLockOk(
  469.     PVOID                   pWlxContext
  470.     );
  471.  
  472. BOOL
  473. WINAPI
  474. WlxIsLogoffOk(
  475.     PVOID                   pWlxContext
  476.     );
  477.  
  478. VOID
  479. WINAPI
  480. WlxLogoff(
  481.     PVOID                   pWlxContext
  482.     );
  483.  
  484.  
  485. VOID
  486. WINAPI
  487. WlxShutdown(
  488.     PVOID                   pWlxContext,
  489.     DWORD                   ShutdownType
  490.     );
  491.  
  492.  
  493. //
  494. // NEW for version 1.1
  495. //
  496. BOOL
  497. WINAPI
  498. WlxScreenSaverNotify(
  499.     PVOID                   pWlxContext,
  500.     BOOL *                  pSecure);
  501.  
  502. BOOL
  503. WINAPI
  504. WlxStartApplication(
  505.     PVOID                   pWlxContext,
  506.     PWSTR                   pszDesktopName,
  507.     PVOID                   pEnvironment,
  508.     PWSTR                   pszCmdLine
  509.     );
  510.  
  511. BOOL
  512. WINAPI
  513. WlxNetworkProviderLoad(
  514.     PVOID                   pWlxContext,
  515.     PWLX_MPR_NOTIFY_INFO    pNprNotifyInfo
  516.     );
  517.  
  518.  
  519.  
  520.  
  521. ////////////////////////////////////////////////////////////////////////
  522. //                                                                    //
  523. //  Services that Winlogon provides                                   //
  524. //                                                                    //
  525. ////////////////////////////////////////////////////////////////////////
  526.  
  527. typedef struct _WLX_DESKTOP {
  528.     DWORD       Size;
  529.     DWORD       Flags;
  530.     HDESK       hDesktop;
  531.     PWSTR       pszDesktopName;
  532. } WLX_DESKTOP, * PWLX_DESKTOP;
  533.  
  534. #define WLX_DESKTOP_NAME    0x00000001      // Name present
  535. #define WLX_DESKTOP_HANDLE  0x00000002      // Handle present
  536.  
  537.  
  538.  
  539. typedef VOID
  540. (WINAPI * PWLX_USE_CTRL_ALT_DEL)(
  541.     HANDLE                  hWlx
  542.     );
  543.  
  544. typedef VOID
  545. (WINAPI * PWLX_SET_CONTEXT_POINTER)(
  546.     HANDLE                  hWlx,
  547.     PVOID                   pWlxContext
  548.     );
  549.  
  550. typedef VOID
  551. (WINAPI * PWLX_SAS_NOTIFY)(
  552.     HANDLE                  hWlx,
  553.     DWORD                   dwSasType
  554.     );
  555.  
  556. typedef BOOL
  557. (WINAPI * PWLX_SET_TIMEOUT)(
  558.     HANDLE                  hWlx,
  559.     DWORD                   Timeout);
  560.  
  561. typedef int
  562. (WINAPI * PWLX_ASSIGN_SHELL_PROTECTION)(
  563.     HANDLE                  hWlx,
  564.     HANDLE                  hToken,
  565.     HANDLE                  hProcess,
  566.     HANDLE                  hThread
  567.     );
  568.  
  569. typedef int
  570. (WINAPI * PWLX_MESSAGE_BOX)(
  571.     HANDLE                  hWlx,
  572.     HWND                    hwndOwner,
  573.     LPWSTR                  lpszText,
  574.     LPWSTR                  lpszTitle,
  575.     UINT                    fuStyle
  576.     );
  577.  
  578. typedef int
  579. (WINAPI * PWLX_DIALOG_BOX)(
  580.     HANDLE                  hWlx,
  581.     HANDLE                  hInst,
  582.     LPWSTR                  lpszTemplate,
  583.     HWND                    hwndOwner,
  584.     DLGPROC                 dlgprc
  585.     );
  586.  
  587. typedef int
  588. (WINAPI * PWLX_DIALOG_BOX_INDIRECT)(
  589.     HANDLE                  hWlx,
  590.     HANDLE                  hInst,
  591.     LPCDLGTEMPLATE          hDialogTemplate,
  592.     HWND                    hwndOwner,
  593.     DLGPROC                 dlgprc
  594.     );
  595.  
  596. typedef int
  597. (WINAPI * PWLX_DIALOG_BOX_PARAM)(
  598.     HANDLE                  hWlx,
  599.     HANDLE                  hInst,
  600.     LPWSTR                  lpszTemplate,
  601.     HWND                    hwndOwner,
  602.     DLGPROC                 dlgprc,
  603.     LPARAM                  dwInitParam
  604.     );
  605.  
  606. typedef int
  607. (WINAPI * PWLX_DIALOG_BOX_INDIRECT_PARAM)(
  608.     HANDLE                  hWlx,
  609.     HANDLE                  hInst,
  610.     LPCDLGTEMPLATE          hDialogTemplate,
  611.     HWND                    hwndOwner,
  612.     DLGPROC                 dlgprc,
  613.     LPARAM                  dwInitParam
  614.     );
  615.  
  616. typedef int
  617. (WINAPI * PWLX_SWITCH_DESKTOP_TO_USER)(
  618.     HANDLE                  hWlx);
  619.  
  620. typedef int
  621. (WINAPI * PWLX_SWITCH_DESKTOP_TO_WINLOGON)(
  622.     HANDLE                  hWlx);
  623.  
  624.  
  625. typedef int
  626. (WINAPI * PWLX_CHANGE_PASSWORD_NOTIFY)(
  627.     HANDLE                  hWlx,
  628.     PWLX_MPR_NOTIFY_INFO    pMprInfo,
  629.     DWORD                   dwChangeInfo
  630.     );
  631.  
  632. typedef BOOL
  633. (WINAPI * PWLX_GET_SOURCE_DESKTOP)(
  634.     HANDLE                  hWlx,
  635.     PWLX_DESKTOP *          ppDesktop);
  636.  
  637. typedef BOOL
  638. (WINAPI * PWLX_SET_RETURN_DESKTOP)(
  639.     HANDLE                  hWlx,
  640.     PWLX_DESKTOP            pDesktop);
  641.  
  642. typedef BOOL
  643. (WINAPI * PWLX_CREATE_USER_DESKTOP)(
  644.     HANDLE                  hWlx,
  645.     HANDLE                  hToken,
  646.     DWORD                   Flags,
  647.     PWSTR                   pszDesktopName,
  648.     PWLX_DESKTOP *          ppDesktop);
  649.  
  650. #define WLX_CREATE_INSTANCE_ONLY    0x00000001
  651. #define WLX_CREATE_USER             0x00000002
  652.  
  653. typedef int
  654. (WINAPI * PWLX_CHANGE_PASSWORD_NOTIFY_EX)(
  655.     HANDLE                  hWlx,
  656.     PWLX_MPR_NOTIFY_INFO    pMprInfo,
  657.     DWORD                   dwChangeInfo,
  658.     PWSTR                   ProviderName,
  659.     PVOID                   Reserved);
  660.  
  661.  
  662. ////////////////////////////////////////////////////////////////////////
  663. //                                                                    //
  664. //  Function dispatch tables.                                         //
  665. //  One of the following tables will be passed to the GINA DLL        //
  666. //  in the WlxInitialize() call during initialization.                //
  667. //                                                                    //
  668. //  NOTE: FOR THIS REVISION THERE IS ONLY ONE TABLE.  DEVELOPERS      //
  669. //        SHOULD EXPECT MORE IN FUTURE RELEASE.                       //
  670. //                                                                    //
  671. ////////////////////////////////////////////////////////////////////////
  672.  
  673. //
  674. // Dispatch table for version WLX_VERSION_1_0
  675. //
  676.  
  677. typedef struct _WLX_DISPATCH_VERSION_1_0 {
  678.     PWLX_USE_CTRL_ALT_DEL           WlxUseCtrlAltDel;
  679.     PWLX_SET_CONTEXT_POINTER        WlxSetContextPointer;
  680.     PWLX_SAS_NOTIFY                 WlxSasNotify;
  681.     PWLX_SET_TIMEOUT                WlxSetTimeout;
  682.     PWLX_ASSIGN_SHELL_PROTECTION    WlxAssignShellProtection;
  683.     PWLX_MESSAGE_BOX                WlxMessageBox;
  684.     PWLX_DIALOG_BOX                 WlxDialogBox;
  685.     PWLX_DIALOG_BOX_PARAM           WlxDialogBoxParam;
  686.     PWLX_DIALOG_BOX_INDIRECT        WlxDialogBoxIndirect;
  687.     PWLX_DIALOG_BOX_INDIRECT_PARAM  WlxDialogBoxIndirectParam;
  688.     PWLX_SWITCH_DESKTOP_TO_USER     WlxSwitchDesktopToUser;
  689.     PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
  690.     PWLX_CHANGE_PASSWORD_NOTIFY     WlxChangePasswordNotify;
  691. } WLX_DISPATCH_VERSION_1_0, *PWLX_DISPATCH_VERSION_1_0;
  692.  
  693. typedef struct _WLX_DISPATCH_VERSION_1_1 {
  694.     PWLX_USE_CTRL_ALT_DEL           WlxUseCtrlAltDel;
  695.     PWLX_SET_CONTEXT_POINTER        WlxSetContextPointer;
  696.     PWLX_SAS_NOTIFY                 WlxSasNotify;
  697.     PWLX_SET_TIMEOUT                WlxSetTimeout;
  698.     PWLX_ASSIGN_SHELL_PROTECTION    WlxAssignShellProtection;
  699.     PWLX_MESSAGE_BOX                WlxMessageBox;
  700.     PWLX_DIALOG_BOX                 WlxDialogBox;
  701.     PWLX_DIALOG_BOX_PARAM           WlxDialogBoxParam;
  702.     PWLX_DIALOG_BOX_INDIRECT        WlxDialogBoxIndirect;
  703.     PWLX_DIALOG_BOX_INDIRECT_PARAM  WlxDialogBoxIndirectParam;
  704.     PWLX_SWITCH_DESKTOP_TO_USER     WlxSwitchDesktopToUser;
  705.     PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
  706.     PWLX_CHANGE_PASSWORD_NOTIFY     WlxChangePasswordNotify;
  707.     PWLX_GET_SOURCE_DESKTOP         WlxGetSourceDesktop;
  708.     PWLX_SET_RETURN_DESKTOP         WlxSetReturnDesktop;
  709.     PWLX_CREATE_USER_DESKTOP        WlxCreateUserDesktop;
  710.     PWLX_CHANGE_PASSWORD_NOTIFY_EX  WlxChangePasswordNotifyEx;
  711. } WLX_DISPATCH_VERSION_1_1, * PWLX_DISPATCH_VERSION_1_1;
  712.  
  713.  
  714.  
  715. #endif /* _WINWLX_ */
  716.