Vraag : WTSGetActiveConsoleSessionId en Vensters 2000

Hallo,

Iam gebruikend WTSGetActiveConsoleSessionId en andere functies om gebruikers te krijgen troost teken en dan proces in zijn gebruikersruimte in werking te stellen. Is er similary functionaliteit in Vensters 2000?

In msdn zie ik dat WTSGetActiveConsoleSessionId van Vensters XP en de Server 2003
van Vensters is

Antwoord : WTSGetActiveConsoleSessionId en Vensters 2000

Nr, de vereisten verklaart duidelijk Xp als minimum verwachte versie van Vensters. Als u een toepassing in de context van de het programma geopende gebruiker wilt uitvoeren, kunt u de volgende code gebruiken, http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Windows/Q_25282045.html ook zien
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  

#pragma commentaar (de Lib, „kernel32.lib“)
#pragma commentaar (de Lib, „user32.lib“)
#pragma commentaar (de Lib, „advapi32.lib“)

leegte
__cdecl
DbgReport (char* __pszFormat,…) {

    statisch klusje s_acBuf [2048];

    va_list _args;

    va_start (_args, __pszFormat);

    vsprintf (s_acBuf, __pszFormat, _args);

    OutputDebugStringA (s_acBuf);

    va_end (_args);
}

DWORD ExecuteCmd   (   LPSTR   pszCmd, BOOL bShow, HANDVAT hToken)
{
    STARTUPINFO         Si;
    PROCESS_INFORMATION pi;

    BOOL                bRes;

    DWORD               dwCode  =   0;

    MSG                msg;

    ZeroMemory  (   &si,     sizeof  (   STARTUPINFO));

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

    bRes    =   CreateProcessAsUser   (  hToken,
                                   VERKLAAR nietig,
                                   pszCmd,
                                   VERKLAAR nietig,
                                   VERKLAAR nietig,
                                   WAAR,
                                   NORMAL_PRIORITY_CLASS,
                                   VERKLAAR nietig,
                                   VERKLAAR nietig,
                                   &si,
                                   π
                               );

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

    terugkeer  (   0);
}


DWORD GetExplorerProcessID ()
{
      HANDVAT hSnapshot;
      PROCESSENTRY32 pe32;
      ZeroMemory (&pe32, sizeof (pe32));
      Temperaturen DWORD;

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

      als (Process32First (hSnapshot, &pe32))
      {
            
            {
                  als (! strcmp (pe32.szExeFile, „explorer.exe“))
                  {
                        temperaturen = pe32.th32ProcessID;
                        onderbreking;
                  }

            } terwijl (Process32Next (hSnapshot, &pe32));
      }

    DbgReport („Ontdekkingsreiziger PID: %d \ n“, temperaturen);

terugkeer temperaturen;
}

BOOL EnableDebugPriv  (   bEnable    BOOL)
{
   Het HANDVAT           hToken;
   TOKEN_PRIVILEGES tp;

   als   (   ! OpenProcessToken   (   GetCurrentProcess   (),
                                    TOKEN_ADJUST_PRIVILEGES,
                                    &hToken
                                )
        )   (  VALSE   ) terugkeer;


   tp.PrivilegeCount    =   1;

   LookupPrivilegeValue (   VERKLAAR nietig,
                            SE_DEBUG_NAME,
                            &tp. Voorrechten  [   0]. Luid
                        );

   tp. Voorrechten    [   0]. Schrijft   =       bEnable toe
                                            ?   SE_PRIVILEGE_ENABLED
                                            :   0;

   AdjustTokenPrivileges    (   hToken,
                                VALS,
                                &tp,
                                sizeof  (   tp),
                                VERKLAAR nietig,
                                VERKLAAR nietig
                            );

   keer terug   (   GetLastError ()  ==   ERROR_SUCCESS);
}

vernietig GetSidUser (PSID psid, char*pName, DWORD dwNameSize) {

    verkool                    acReferencedDomain  [   LM20_DNLEN  +   1];
    DWORD                   dwDomainBufSize     =   sizeof  (   acReferencedDomain);
    SID_NAME_USE            eUse;

               //  naam van de raadplegings de duidelijke tekst van de eigenaar
                als  (   ! LookupAccountSid   (   VERKLAAR nietig,
                                                psid,
                                                pName,
                                                &dwNameSize,
                                                acReferencedDomain,
                                                &dwDomainBufSize,
                                                &eUse
                                            )
                    )
                    {
                        DWORD dwErr   =   GetLastError    ();

                        DbgReport („ontbroken LookupAccountSid (): %d \ n“, dwErr);

                    } anders DbgReport („SID vertegenwoordigt %s \ \ %s \ n“, acReferencedDomain, pName);
}

nietige ImpersonateInteractiveUser (LPSTR pCmd, BOOL bShow)
{
   Het HANDVAT hToken = NIETIG VERKLAART;                
   Het HANDVAT hProcess = VERKLAART nietig;
   klusje                    acName  [   LM20_DNLEN  +   1];
   DWORD                   dwNameSize     =   sizeof  (   acName);

   DWORD processID = GetExplorerProcessID ();
   als (processID)
    {
    hProcess =
         OpenProcess (  
               PROCESS_ALL_ACCESS,
         WAAR,
          processID);

    als (hProcess)
        {
        als (OpenProcessToken (
                    hProcess,
             TOKEN_ALL_ACCESS,
             &hToken))
        {
         Ptu TOKEN_USER*;
         DWORD dw;
         GetTokenInformation (hToken, ONGELDIGE TokenUser, 0, &dw);
         ptu = (TOKEN_USER*) _alloca (dw);

         als (! GetTokenInformation (hToken, TokenUser, ptu, dw, &dw)) DbgReport („ontbroken GetTokenInformation (), reden: %d \ n“, GetLastError ());
         GetSidUser (ptu->User.Sid, acName, dwNameSize);

         als (! ImpersonateLoggedOnUser (hToken)) DbgReport („ontbroken ImpersonateLoggedOnUser (), reden: %d \ n“, GetLastError ());

         DbgReport (het „bevel van de Lancering: %s als \ „%s \“ \ n ", pCmd, acName);
         ExecuteCmd (pCmd, bShow, hToken);

          CloseHandle (hToken);
        } anders DbgReport („ontbroken OpenProcessToken (), reden: %d \ n“, GetLastError ());
        CloseHandle (hProcess);
    } anders DbgReport („ontbroken OpenProcess (), reden: %d \ n“, GetLastError ());
   } 
}


int. leiding (int. argc, klusje ** argv) {

  als (2 > argc) terugkeer -1;

  (WARE) EnableDebugPriv;

  BOOL bShow = WAAR;

  als (argc == 3) bShow = strcmp (argv [2], „/HIDE“);

  ImpersonateInteractiveUser (argv [1], bShow);

  terugkeer 0;

}
Andere oplossingen  
 
programming4us programming4us