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