MCPcopy Create free account
hub / github.com/bobranten/Ext4Fsd / Ext2CreateToken

Function Ext2CreateToken

Ext2Mgr/Ext2Pipe.cpp:355–424  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

353}
354
355int Ext2CreateToken(DWORD pid, DWORD *sid, HANDLE *token)
356{
357 HANDLE h = NULL, token_user = NULL;
358 DWORD dwTokenRights;
359 PSID IntegrityLevelSid = NULL;
360 CString SIDvalue;
361 TOKEN_MANDATORY_LABEL IntegrityLevelToken = {0};
362
363 int rc = -1;
364
365 rc = ProcessIdToSessionId(pid, sid);
366 if (!rc) {
367 rc = -1 * GetLastError();
368 goto errorout;
369 }
370
371 h = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
372 if (h == NULL || h == INVALID_HANDLE_VALUE) {
373 rc = -1 * GetLastError();
374 goto errorout;
375 }
376
377 rc = OpenProcessToken(h, TOKEN_DUPLICATE, &token_user);
378 if(!rc) {
379 rc = -1 * GetLastError();
380 goto errorout;
381 }
382
383 dwTokenRights = TOKEN_QUERY | TOKEN_ASSIGN_PRIMARY |
384 TOKEN_DUPLICATE | TOKEN_ADJUST_DEFAULT |
385 TOKEN_ADJUST_SESSIONID;
386 rc = DuplicateTokenEx(token_user, dwTokenRights, NULL,
387 SecurityImpersonation /*SecurityIdentification*/,
388 TokenPrimary, token);
389 if (!rc) {
390 rc = -1 * GetLastError();
391 goto errorout;
392 }
393
394 // S-revision-authority-rid
395 // S-1-16-?
396 // 16 represents
397 // SECURITY_MANDATORY_LABEL_AUTHORITY
398
399 SIDvalue.Format("S-1-16-%d", SECURITY_MANDATORY_MEDIUM_RID);
400 if(!ConvertStringSidToSidA(SIDvalue, &IntegrityLevelSid)) {
401 /* not critical, ignore this error */
402 goto errorout;
403 }
404
405 IntegrityLevelToken.Label.Attributes = SE_GROUP_INTEGRITY;
406 IntegrityLevelToken.Label.Sid = IntegrityLevelSid;
407
408 SetTokenInformation(*token,
409 TokenIntegrityLevel,
410 &IntegrityLevelToken,
411 sizeof(TOKEN_MANDATORY_LABEL) +
412 GetLengthSid(IntegrityLevelSid));

Callers 1

Ext2StartSrvFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected