Question : WTSGetActiveConsoleSessionId et Windows 2000

Bonjour, le

Iam using WTSGetActiveConsoleSessionId et d'autres fonctions à obtenir les utilisateurs consolent la marque et puis courent le processus dans son espace d'utilisateurs. Y a-t-il fonctionnalité similary en Windows 2000 ? msdn du

In je vois que WTSGetActiveConsoleSessionId est de Windows Xp et de serveur 2003
de Windows class= de

Réponse : WTSGetActiveConsoleSessionId et Windows 2000

Pas, les conditions énoncent clairement Xp comme version de Windows prévue par minimum. Si vous voulez exécuter une application dans le cadre de l'utilisateur ouvert une session, vous pouvez employer le code suivant, voyez également http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Windows/Q_25282045.html
1 :
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
13 :
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 :
22 :
23 :
24 :
25 :
26 :
27 :
28 :
29 :
30 :
31 :
32 :
33 :
34 :
35 :
36 :
37 :
38 :
39 :
40 :
41 :
42 :
43 :
44 :
45 :
46 :
47 :
48 :
49 :
50 :
51 :
52 :
53 :
54 :
55 :
56 :
57 :
58 :
59 :
60 :
61 :
62 :
63 :
64 :
65 :
66 :
67 :
68 :
69 :
70 :
71 :
72 :
73 :
74 :
75 :
76 :
77 :
78 :
79 :
80 :
81 :
82 :
83 :
84 :
85 :
86 :
87 :
88 :
89 :
90 :
91 :
92 :
93 :
94 :
95 :
96 :
97 :
98 :
99 :
100 :
101 :
102 :
103 :
104 :
105 :
106 :
107 :
108 :
109 :
110 :
111 :
112 :
113 :
114 :
115 :
116 :
117 :
118 :
119 :
120 :
121 :
122 :
123 :
124 :
125 :
126 :
127 :
128 :
129 :
130 :
131 :
132 :
133 :
134 :
135 :
136 :
137 :
138 :
139 :
140 :
141 :
142 :
143 :
144 :
145 :
146 :
147 :
148 :
149 :
150 :
151 :
152 :
153 :
154 :
155 :
156 :
157 :
158 :
159 :
160 :
161 :
162 :
163 :
164 :
165 :
166 :
167 :
168 :
169 :
170 :
171 :
172 :
173 :
174 :
175 :
176 :
177 :
178 :
179 :
180 :
181 :
182 :
183 :
184 :
185 :
186 :
187 :
188 :
189 :
190 :
191 :
192 :
193 :
194 :
195 :
196 :
197 :
198 :
199 :
200 :
201 :
202 :
203 :
204 :
205 :
206 :
207 :
208 :
209 :
210 :
211 :
#include  
#include  
#include  
#include  
#include  

commentaire de #pragma (bibliothèque, « kernel32.lib »)
commentaire de #pragma (bibliothèque, « user32.lib »)
commentaire de #pragma (bibliothèque, « advapi32.lib »)

vide
__cdecl
DbgReport (__pszFormat de char*,…) {

    s_acBuf statique de char [2048] ;

    _args de va_list ;

    va_start (_args, __pszFormat) ;

    vsprintf (s_acBuf, __pszFormat, _args) ;

    OutputDebugStringA (s_acBuf) ;

    va_end (_args) ;
}

DWORD ExecuteCmd   (   le pszCmd   de LPSTR, bShow de BOOL, POIGNÉE hToken)
{
    STARTUPINFO         SI ;
    PROCESS_INFORMATION pi ;

    bRes                de BOOL ;

    dwCode               de DWORD  =   0 ;

    Msg                de MSG ;

    ZeroMemory  (   &si,     sizeof  (   STARTUPINFO));

    si.cb           =   sizeof  (   STARTUPINFO) ;
    si.dwFlags      =   STARTF_USESHOWWINDOW ;
    si.wShowWindow  =   bShow ? SW_SHOWNORMAL : SW_HIDE ;

    bRes    =   CreateProcessAsUser   (  hToken,
                                   ANNULER,
                                   pszCmd,
                                   NULLE,
                                   NULLE,
                                   VRAI,
                                   NORMAL_PRIORITY_CLASS,
                                   NULLE,
                                   NULLE,
                                   &si,
                                   π
                               ) ;

    
    CloseHandle (   pi.hProcess) ;
    CloseHandle (   pi.hThread) ;

    retour  (   0) ;
}


DWORD GetExplorerProcessID ()
{
      hSnapshot de POIGNÉE ;
      PROCESSENTRY32 pe32 ;
      ZeroMemory (&pe32, sizeof (pe32));
      Temp de DWORD ;

    hSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, NULLE) ;
      
      pe32.dwSize = sizeof (PROCESSENTRY32) ;

      si (Process32First (hSnapshot, &pe32))
      {
            faire
            {
                  si (! strcmp (pe32.szExeFile, « explorer.exe »))
                  {
                        temp = pe32.th32ProcessID ;
                        coupure ;
                  }

            } tandis que (Process32Next (hSnapshot, &pe32));
      }

    DbgReport (« explorateur PID : %d \ n », temp) ;

temp de retour ;
}

BOOL EnableDebugPriv  (   BOOL    bEnable)
{
   La POIGNÉE           hToken ;
   TOKEN_PRIVILEGES tp ;

   si   (   ! OpenProcessToken   (   GetCurrentProcess   (),
                                    TOKEN_ADJUST_PRIVILEGES,
                                    &hToken
                                )
        )   retour  (   FAUX) ;


   tp.PrivilegeCount    =   1 ;

   LookupPrivilegeValue (   NULLE,
                            SE_DEBUG_NAME,
                            &tp. Privilèges  [   0]. Luid
                        ) ;

   tp. Privilèges    [   0]. Attributs   =       bEnable
                                            ?   SE_PRIVILEGE_ENABLED
                                            :   0 ;

   AdjustTokenPrivileges    (   hToken,
                                FAUX,
                                &tp,
                                sizeof  (   tp),
                                NULLE,
                                NULLE
                            ) ;

   retourner   ==   ERROR_SUCCESS (de GetLastError  (   )) ;
}

vider GetSidUser (Psid Psid, le char*pName, DWORD dwNameSize) {

    carboniser                    l'acReferencedDomain  [   LM20_DNLEN  +   1] ;
    DWORD                   dwDomainBufSize     =   sizeof  (   acReferencedDomain) ;
    eUse            de SID_NAME_USE ;

               nom  des textes clairs de consultation de // du propriétaire
                si  (   ! LookupAccountSid   (   NULLE,
                                                Psid,
                                                pName,
                                                &dwNameSize,
                                                acReferencedDomain,
                                                &dwDomainBufSize,
                                                &eUse
                                            )
                    )
                    {
                        dwErr =   GetLastError   de DWORD    () ;

                        DbgReport (« LookupAccountSid () a échoué : %d \ n », dwErr) ;

                    } DbgReport d'autre (le « Sid représente \ de %s \ %s \ n », acReferencedDomain, pName) ;
}

ImpersonateInteractiveUser vide (pCmd de LPSTR, bShow de BOOL)
{
   La POIGNÉE hToken = NULLE ;                
   hProcess = NULLE de POIGNÉE ;
   acName                    de char  [   LM20_DNLEN  +   1] ;
   DWORD                   dwNameSize     =   sizeof  (   acName) ;

   processID = GetExplorerProcessID de DWORD () ;
   si (processID)
    {
    hProcess =
         OpenProcess (  
               PROCESS_ALL_ACCESS,
         VRAI,
          processID) ;

    si (hProcess)
        {
        si (OpenProcessToken (
                    hProcess,
             TOKEN_ALL_ACCESS,
             &hToken))
        {
         Ptu de TOKEN_USER* ;
         Dw de DWORD ;
         GetTokenInformation (hToken, TokenUser, la NULLE, 0, &dw) ;
         ptu = _alloca (TOKEN_USER*) (dw) ;

         si (! GetTokenInformation (hToken, TokenUser, ptu, dw, &dw)) DbgReport (« GetTokenInformation () a échoué, raison : %d \ n », GetLastError ());
         GetSidUser (ptu->User.Sid, acName, dwNameSize) ;

         si (! ImpersonateLoggedOnUser (hToken)) DbgReport (« ImpersonateLoggedOnUser () a échoué, raison : %d \ n », GetLastError ());

         DbgReport (« commande de lancement : comme de %s \ « %s \ » \ n ", pCmd, acName) ;
         ExecuteCmd (le pCmd, bShow, hToken) ;

          CloseHandle (hToken) ;
        } DbgReport d'autre (« OpenProcessToken () a échoué, raison : %d \ n », GetLastError ());
        CloseHandle (hProcess) ;
    } DbgReport d'autre (« OpenProcess () a échoué, raison : %d \ n », GetLastError ());
   } 
}


force d'international (argc d'international, char ** argv) {

  si (2 > argc) retour -1 ;

  EnableDebugPriv (VRAI) ;

  Le bShow de BOOL = RECTIFIENT ;

  si (bShow de == d'argc 3) = strcmp (argv [2], « /HIDE ») ;

  ImpersonateInteractiveUser (argv [1], bShow) ;

  retour 0 ;

}
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us