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