ReactOS  0.4.15-dev-1201-gb2cf5a4
faultrep.c File Reference
#include <stdarg.h>
#include <stdio.h>
#include "windef.h"
#include "winbase.h"
#include "winerror.h"
#include "winreg.h"
#include "errorrep.h"
#include "wine/test.h"
Include dependency graph for faultrep.c:

Go to the source code of this file.

Functions

static BOOL is_process_limited (void)
 
static void test_AddERExcludedApplicationA (void)
 
 START_TEST (faultrep)
 

Variables

static const char regpath_root [] = "Software\\Microsoft\\PCHealth\\ErrorReporting"
 
static const char regpath_exclude [] = "ExclusionList"
 

Function Documentation

◆ is_process_limited()

static BOOL is_process_limited ( void  )
static

Definition at line 37 of file faultrep.c.

38 {
39  static BOOL (WINAPI *pCheckTokenMembership)(HANDLE,PSID,PBOOL) = NULL;
40  static BOOL (WINAPI *pOpenProcessToken)(HANDLE, DWORD, PHANDLE) = NULL;
42  PSID Group;
43  BOOL IsInGroup;
44  HANDLE token;
45 
46  if (!pOpenProcessToken)
47  {
48  HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll");
49  pOpenProcessToken = (void*)GetProcAddress(hadvapi32, "OpenProcessToken");
50  pCheckTokenMembership = (void*)GetProcAddress(hadvapi32, "CheckTokenMembership");
51  if (!pCheckTokenMembership || !pOpenProcessToken)
52  {
53  /* Win9x (power to the masses) or NT4 (no way to know) */
54  trace("missing pOpenProcessToken or CheckTokenMembership\n");
55  return FALSE;
56  }
57  }
58 
61  0, 0, 0, 0, 0, 0, &Group) ||
62  !pCheckTokenMembership(NULL, Group, &IsInGroup))
63  {
64  trace("Could not check if the current user is an administrator\n");
65  return FALSE;
66  }
67  if (!IsInGroup)
68  {
72  0, 0, 0, 0, 0, 0, &Group) ||
73  !pCheckTokenMembership(NULL, Group, &IsInGroup))
74  {
75  trace("Could not check if the current user is a power user\n");
76  return FALSE;
77  }
78  if (!IsInGroup)
79  {
80  /* Only administrators and power users can be powerful */
81  return TRUE;
82  }
83  }
84 
85  if (pOpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token))
86  {
87  BOOL ret;
89  DWORD size;
90 
93  return (ret && type == TokenElevationTypeLimited);
94  }
95  return FALSE;
96 }
enum _TOKEN_ELEVATION_TYPE TOKEN_ELEVATION_TYPE
#define CloseHandle
Definition: compat.h:598
#define TRUE
Definition: types.h:120
_In_opt_ PSID Group
Definition: rtlfuncs.h:1605
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define DOMAIN_ALIAS_RID_POWER_USERS
Definition: setypes.h:627
#define BOOL
Definition: nt_native.h:43
#define DWORD
Definition: nt_native.h:44
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
Definition: glfuncs.h:210
smooth NULL
Definition: ftsmooth.c:416
BOOL * PBOOL
Definition: windef.h:161
#define SECURITY_NT_AUTHORITY
Definition: setypes.h:526
GLsizeiptr size
Definition: glext.h:5919
#define trace
Definition: atltest.h:70
#define SECURITY_BUILTIN_DOMAIN_RID
Definition: setypes.h:553
#define TOKEN_QUERY
Definition: setypes.h:874
#define WINAPI
Definition: msvc.h:6
unsigned long DWORD
Definition: ntddk_ex.h:95
PVOID HANDLE
Definition: typedefs.h:73
struct _SID * PSID
Definition: eventlog.c:35
int ret
PVOID *typedef PHANDLE
Definition: ntsecpkg.h:454
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
#define GetCurrentProcess()
Definition: compat.h:618
BOOL WINAPI GetTokenInformation(HANDLE TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, LPVOID TokenInformation, DWORD TokenInformationLength, PDWORD ReturnLength)
Definition: security.c:413
#define GetProcAddress(x, y)
Definition: compat.h:612
#define DOMAIN_ALIAS_RID_ADMINS
Definition: setypes.h:624
SID_IDENTIFIER_AUTHORITY NtAuthority
Definition: database.c:19
BOOL WINAPI AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority, BYTE nSubAuthorityCount, DWORD nSubAuthority0, DWORD nSubAuthority1, DWORD nSubAuthority2, DWORD nSubAuthority3, DWORD nSubAuthority4, DWORD nSubAuthority5, DWORD nSubAuthority6, DWORD nSubAuthority7, PSID *pSid)
Definition: security.c:553

Referenced by test_AddERExcludedApplicationA().

◆ START_TEST()

START_TEST ( faultrep  )

Definition at line 158 of file faultrep.c.

159 {
161 }
static void test_AddERExcludedApplicationA(void)
Definition: faultrep.c:101

◆ test_AddERExcludedApplicationA()

static void test_AddERExcludedApplicationA ( void  )
static

Definition at line 101 of file faultrep.c.

102 {
103  BOOL res;
104  LONG lres;
105  HKEY hroot;
106  HKEY hexclude = 0;
107 
108  /* clean state */
110  if (lres == ERROR_ACCESS_DENIED)
111  {
112  skip("Not enough access rights\n");
113  return;
114  }
115 
116  if (!lres)
117  lres = RegOpenKeyA(hroot, regpath_exclude, &hexclude);
118 
119  if (!lres)
120  RegDeleteValueA(hexclude, "winetest_faultrep.exe");
121 
122 
123  SetLastError(0xdeadbeef);
125  ok(!res, "got %d and 0x%x (expected FALSE)\n", res, GetLastError());
126 
127  SetLastError(0xdeadbeef);
129  ok(!res, "got %d and 0x%x (expected FALSE)\n", res, GetLastError());
130 
131  SetLastError(0xdeadbeef);
132  /* existence of the path doesn't matter this function succeeded */
133  res = AddERExcludedApplicationA("winetest_faultrep.exe");
134  if (is_process_limited())
135  {
136  /* LastError is not set! */
137  ok(!res, "AddERExcludedApplicationA should have failed got %d\n", res);
138  }
139  else
140  {
141  ok(res, "AddERExcludedApplicationA failed (le=0x%x)\n", GetLastError());
142 
143  /* add, when already present */
144  SetLastError(0xdeadbeef);
145  res = AddERExcludedApplicationA("winetest_faultrep.exe");
146  ok(res, "AddERExcludedApplicationA failed (le=0x%x)\n", GetLastError());
147  }
148 
149  /* cleanup */
150  RegDeleteValueA(hexclude, "winetest_faultrep.exe");
151 
152  RegCloseKey(hexclude);
153  RegCloseKey(hroot);
154 }
LONG WINAPI RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3257
static BOOL is_process_limited(void)
Definition: faultrep.c:37
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1044
static const char regpath_exclude[]
Definition: faultrep.c:34
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
#define ERROR_ACCESS_DENIED
Definition: compat.h:97
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
smooth NULL
Definition: ftsmooth.c:416
static const char regpath_root[]
Definition: faultrep.c:33
LONG WINAPI RegCreateKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:1177
#define SetLastError(x)
Definition: compat.h:611
BOOL WINAPI AddERExcludedApplicationA(LPCSTR lpAppFileName)
Definition: faultrep.c:88
#define ok(value,...)
Definition: atltest.h:57
LONG WINAPI RegDeleteValueA(HKEY hKey, LPCSTR lpValueName)
Definition: reg.c:2319
#define skip(...)
Definition: atltest.h:64
GLuint res
Definition: glext.h:9613
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by START_TEST().

Variable Documentation

◆ regpath_exclude

const char regpath_exclude[] = "ExclusionList"
static

Definition at line 34 of file faultrep.c.

Referenced by test_AddERExcludedApplicationA().

◆ regpath_root

const char regpath_root[] = "Software\\Microsoft\\PCHealth\\ErrorReporting"
static

Definition at line 33 of file faultrep.c.

Referenced by test_AddERExcludedApplicationA().