ReactOS 0.4.15-dev-8241-g63935f8
resources.c File Reference
#include <user32.h>
Include dependency graph for resources.c:

Go to the source code of this file.

Macros

#define CR_SUCCESS   0x00000000
 
#define CR_OUT_OF_MEMORY   0x00000002
 
#define CR_INVALID_POINTER   0x00000003
 
#define CR_INVALID_DATA   0x0000001F
 

Typedefs

typedef DWORD(WINAPICMP_REGNOTIFY) (HANDLE, LPVOID, DWORD, PULONG)
 
typedef DWORD(WINAPICMP_UNREGNOTIFY) (ULONG)
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (resource)
 
INT WINAPI LoadStringW (HINSTANCE instance, UINT resource_id, LPWSTR buffer, INT buflen)
 
INT WINAPI LoadStringA (HINSTANCE instance, UINT resource_id, LPSTR buffer, INT buflen)
 
HDEVNOTIFY WINAPI RegisterDeviceNotificationW (HANDLE hRecipient, LPVOID NotificationFilter, DWORD Flags)
 
BOOL WINAPI UnregisterDeviceNotification (HDEVNOTIFY Handle)
 

Variables

static HINSTANCE hSetupApi = NULL
 

Macro Definition Documentation

◆ CR_INVALID_DATA

#define CR_INVALID_DATA   0x0000001F

Definition at line 9 of file resources.c.

◆ CR_INVALID_POINTER

#define CR_INVALID_POINTER   0x00000003

Definition at line 8 of file resources.c.

◆ CR_OUT_OF_MEMORY

#define CR_OUT_OF_MEMORY   0x00000002

Definition at line 7 of file resources.c.

◆ CR_SUCCESS

#define CR_SUCCESS   0x00000000

Definition at line 6 of file resources.c.

Typedef Documentation

◆ CMP_REGNOTIFY

typedef DWORD(WINAPI * CMP_REGNOTIFY) (HANDLE, LPVOID, DWORD, PULONG)

Definition at line 12 of file resources.c.

◆ CMP_UNREGNOTIFY

typedef DWORD(WINAPI * CMP_UNREGNOTIFY) (ULONG)

Definition at line 13 of file resources.c.

Function Documentation

◆ LoadStringA()

INT WINAPI LoadStringA ( HINSTANCE  instance,
UINT  resource_id,
LPSTR  buffer,
INT  buflen 
)

Definition at line 77 of file resources.c.

78{
79 HGLOBAL hmem;
80 HRSRC hrsrc;
81 DWORD retval = 0;
82
83 TRACE("instance = %p, id = %04x, buffer = %p, length = %d\n",
84 instance, resource_id, buffer, buflen);
85
86 if (!buflen) return -1;
87
88 /* Use loword (incremented by 1) as resourceid */
89 if ((hrsrc = FindResourceW( instance, MAKEINTRESOURCEW((LOWORD(resource_id) >> 4) + 1),
90 (LPWSTR)RT_STRING )) &&
91 (hmem = LoadResource( instance, hrsrc )))
92 {
93 const WCHAR *p = LockResource(hmem);
94 unsigned int id = resource_id & 0x000f;
95
96 while (id--) p += *p + 1;
97
98 if (buflen != 1)
99 RtlUnicodeToMultiByteN( buffer, buflen - 1, &retval, (PWSTR)(p + 1), *p * sizeof(WCHAR) );
100 }
101 buffer[retval] = 0;
102 TRACE("returning %s\n", debugstr_a(buffer));
103 return retval;
104}
static HINSTANCE instance
Definition: main.c:40
HRSRC WINAPI FindResourceW(HINSTANCE hModule, LPCWSTR name, LPCWSTR type)
Definition: res.c:176
LPVOID WINAPI LockResource(HGLOBAL handle)
Definition: res.c:550
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:532
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint buffer
Definition: glext.h:5915
GLfloat GLfloat p
Definition: glext.h:8902
#define debugstr_a
Definition: kernel32.h:31
_Use_decl_annotations_ NTSTATUS NTAPI RtlUnicodeToMultiByteN(_Out_ PCHAR MbString, _In_ ULONG MbSize, _Out_opt_ PULONG ResultSize, _In_ PCWCH UnicodeString, _In_ ULONG UnicodeSize)
Definition: nlsboot.c:107
#define LOWORD(l)
Definition: pedump.c:82
#define RT_STRING
Definition: pedump.c:368
#define TRACE(s)
Definition: solgame.cpp:4
uint16_t * PWSTR
Definition: typedefs.h:56
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ LoadStringW()

INT WINAPI LoadStringW ( HINSTANCE  instance,
UINT  resource_id,
LPWSTR  buffer,
INT  buflen 
)

Definition at line 21 of file resources.c.

23{
24 HGLOBAL hmem;
25 HRSRC hrsrc;
26 WCHAR *p;
27 int string_num;
28 int i;
29
30 TRACE("instance = %p, id = %04x, buffer = %p, length = %d\n",
31 instance, resource_id, buffer, buflen);
32
33 if(buffer == NULL)
34 return 0;
35
36 /* Use loword (incremented by 1) as resourceid */
37 hrsrc = FindResourceW( instance, MAKEINTRESOURCEW((LOWORD(resource_id) >> 4) + 1),
39 if (!hrsrc) return 0;
40 hmem = LoadResource( instance, hrsrc );
41 if (!hmem) return 0;
42
43 p = LockResource(hmem);
44 string_num = resource_id & 0x000f;
45 for (i = 0; i < string_num; i++)
46 p += *p + 1;
47
48 TRACE("strlen = %d\n", (int)*p );
49
50 /*if buflen == 0, then return a read-only pointer to the resource itself in buffer
51 it is assumed that buffer is actually a (LPWSTR *) */
52 if(buflen == 0)
53 {
54 *((LPWSTR *)buffer) = p + 1;
55 return *p;
56 }
57
58 i = min(buflen - 1, *p);
59 if (i > 0) {
60 memcpy(buffer, p + 1, i * sizeof (WCHAR));
61 buffer[i] = 0;
62 } else {
63 if (buflen > 1) {
64 buffer[0] = 0;
65 return 0;
66 }
67 }
68
69 TRACE("%s loaded !\n", debugstr_w(buffer));
70 return i;
71}
#define NULL
Definition: types.h:112
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 GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define debugstr_w
Definition: kernel32.h:32
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define min(a, b)
Definition: monoChain.cc:55

◆ RegisterDeviceNotificationW()

HDEVNOTIFY WINAPI RegisterDeviceNotificationW ( HANDLE  hRecipient,
LPVOID  NotificationFilter,
DWORD  Flags 
)

Definition at line 111 of file resources.c.

114{
115 DWORD ConfigRet = 0;
116 CMP_REGNOTIFY RegNotify = NULL;
117 HDEVNOTIFY hDevNotify = NULL;
118
119 if (hSetupApi == NULL) hSetupApi = LoadLibraryA("SETUPAPI.DLL");
120 if (hSetupApi == NULL) return NULL;
121
122 RegNotify = (CMP_REGNOTIFY) GetProcAddress(hSetupApi, "CMP_RegisterNotification");
123 if (RegNotify == NULL)
124 {
126 hSetupApi = NULL;
127 return NULL;
128 }
129
130 ConfigRet = RegNotify(hRecipient, NotificationFilter, Flags, (PULONG) &hDevNotify);
131 if (ConfigRet != CR_SUCCESS)
132 {
133 switch (ConfigRet)
134 {
135 case CR_OUT_OF_MEMORY:
137 break;
138
141 break;
142
143 case CR_INVALID_DATA:
145 break;
146
147 default:
149 break;
150 }
151 }
152
153 return hDevNotify;
154}
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define SetLastError(x)
Definition: compat.h:752
#define GetProcAddress(x, y)
Definition: compat.h:753
#define FreeLibrary(x)
Definition: compat.h:748
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
#define CR_INVALID_DATA
Definition: resources.c:9
#define CR_OUT_OF_MEMORY
Definition: resources.c:7
DWORD(WINAPI * CMP_REGNOTIFY)(HANDLE, LPVOID, DWORD, PULONG)
Definition: resources.c:12
static HINSTANCE hSetupApi
Definition: resources.c:15
#define CR_INVALID_POINTER
Definition: resources.c:8
#define CR_SUCCESS
Definition: resources.c:6
uint32_t * PULONG
Definition: typedefs.h:59
#define ERROR_SERVICE_SPECIFIC_ERROR
Definition: winerror.h:617
#define ERROR_INVALID_DATA
Definition: winerror.h:116
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170

Referenced by RegisterForDeviceNotifications().

◆ UnregisterDeviceNotification()

BOOL WINAPI UnregisterDeviceNotification ( HDEVNOTIFY  Handle)

Definition at line 162 of file resources.c.

163{
164 DWORD ConfigRet = 0;
165 CMP_UNREGNOTIFY UnRegNotify = NULL;
166
167 if (hSetupApi == NULL) hSetupApi = LoadLibraryA("SETUPAPI.DLL");
168 if (hSetupApi == NULL) return FALSE;
169
170 UnRegNotify = (CMP_UNREGNOTIFY) GetProcAddress(hSetupApi, "CMP_UnregisterNotification");
171 if (UnRegNotify == NULL)
172 {
174 hSetupApi = NULL;
175 return FALSE;
176 }
177
178 ConfigRet = UnRegNotify((ULONG_PTR)Handle );
179 if (ConfigRet != CR_SUCCESS)
180 {
181 switch (ConfigRet)
182 {
185 break;
186
187 case CR_INVALID_DATA:
189 break;
190
191 default:
193 break;
194 }
195 return FALSE;
196 }
197
198 return TRUE;
199}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
ULONG Handle
Definition: gdb_input.c:15
DWORD(WINAPI * CMP_UNREGNOTIFY)(ULONG)
Definition: resources.c:13
uint32_t ULONG_PTR
Definition: typedefs.h:65

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( resource  )

Variable Documentation

◆ hSetupApi

HINSTANCE hSetupApi = NULL
static

Definition at line 15 of file resources.c.

Referenced by RegisterDeviceNotificationW(), and UnregisterDeviceNotification().