app-helpers.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include "app-helpers.h"
  4. #include "nt-stuff.h"
  5. WINADVAPI WINAPI ConvertSidToStringSidW(PSID sid, LPWSTR *str);
  6. bool is_app(HANDLE process)
  7. {
  8. DWORD size_ret;
  9. DWORD ret = 0;
  10. HANDLE token;
  11. if (OpenProcessToken(process, TOKEN_QUERY, &token)) {
  12. BOOL success = GetTokenInformation(token, TokenIsAppContainer,
  13. &ret, sizeof(ret),
  14. &size_ret);
  15. if (!success) {
  16. DWORD error = GetLastError();
  17. int test = 0;
  18. }
  19. CloseHandle(token);
  20. }
  21. return !!ret;
  22. }
  23. wchar_t *get_app_sid(HANDLE process)
  24. {
  25. wchar_t *ret = NULL;
  26. DWORD size_ret;
  27. BOOL success;
  28. HANDLE token;
  29. if (OpenProcessToken(process, TOKEN_QUERY, &token)) {
  30. DWORD info_len = GetSidLengthRequired(12) +
  31. sizeof(TOKEN_APPCONTAINER_INFORMATION);
  32. PTOKEN_APPCONTAINER_INFORMATION info = malloc(info_len);
  33. success = GetTokenInformation(token, TokenAppContainerSid, info,
  34. info_len, &size_ret);
  35. if (success)
  36. ConvertSidToStringSidW(info->TokenAppContainer, &ret);
  37. free(info);
  38. CloseHandle(token);
  39. }
  40. return ret;
  41. }
  42. static const wchar_t *path_format =
  43. L"\\Sessions\\%lu\\AppContainerNamedObjects\\%s\\%s";
  44. HANDLE create_app_mutex(const wchar_t *sid, const wchar_t *name)
  45. {
  46. wchar_t path[MAX_PATH];
  47. DWORD session_id = WTSGetActiveConsoleSessionId();
  48. _snwprintf(path, MAX_PATH, path_format, session_id, sid, name);
  49. return nt_create_mutex(path);
  50. }
  51. HANDLE open_app_mutex(const wchar_t *sid, const wchar_t *name)
  52. {
  53. wchar_t path[MAX_PATH];
  54. DWORD session_id = WTSGetActiveConsoleSessionId();
  55. _snwprintf(path, MAX_PATH, path_format, session_id, sid, name);
  56. return nt_open_mutex(path);
  57. }
  58. HANDLE open_app_event(const wchar_t *sid, const wchar_t *name)
  59. {
  60. wchar_t path[MAX_PATH];
  61. DWORD session_id = WTSGetActiveConsoleSessionId();
  62. _snwprintf(path, MAX_PATH, path_format, session_id, sid, name);
  63. return nt_open_event(path);
  64. }
  65. HANDLE open_app_map(const wchar_t *sid, const wchar_t *name)
  66. {
  67. wchar_t path[MAX_PATH];
  68. DWORD session_id = WTSGetActiveConsoleSessionId();
  69. _snwprintf(path, MAX_PATH, path_format, session_id, sid, name);
  70. return nt_open_map(path);
  71. }