home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / BC_502 / RTLWIN32.PAK / WINWLX.H < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-06  |  21.5 KB  |  701 lines

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