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