ReactOS 0.4.17-dev-357-ga8f14ff
thread.c File Reference
#include <stdarg.h>
#include <string.h>
#include "windef.h"
#include "winbase.h"
#include "winnls.h"
#include "winuser.h"
#include "shlwapi.h"
#include "shlobj.h"
#include "wine/debug.h"
Include dependency graph for thread.c:

Go to the source code of this file.

Macros

#define COBJMACROS
 
#define NO_SHLWAPI_REG
 
#define NO_SHLWAPI_PATH
 
#define NO_SHLWAPI_GDI
 
#define NO_SHLWAPI_STREAM
 
#define NO_SHLWAPI_USER
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (shell)
 
INT WINAPI SHStringFromGUIDA (REFGUID, LPSTR, INT)
 
LPSECURITY_ATTRIBUTES WINAPI CreateAllAccessSecurityAttributes (LPSECURITY_ATTRIBUTES lpAttr, PSECURITY_DESCRIPTOR lpSec, DWORD p3)
 
HRESULT WINAPI _SHGetInstanceExplorer (IUnknown **lppUnknown)
 
LONG WINAPI SHGlobalCounterGetValue (HANDLE hSem)
 
LONG WINAPI SHGlobalCounterIncrement (HANDLE hSem)
 
DWORD WINAPI SHGlobalCounterDecrement (HANDLE hSem)
 
HANDLE WINAPI SHGlobalCounterCreateNamedW (LPCWSTR lpszName, DWORD iInitial)
 
HANDLE WINAPI SHGlobalCounterCreateNamedA (LPCSTR lpszName, DWORD iInitial)
 
HANDLE WINAPI SHGlobalCounterCreate (REFGUID guid)
 

Variables

DWORD SHLWAPI_ThreadRef_index
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 24 of file thread.c.

◆ NO_SHLWAPI_GDI

#define NO_SHLWAPI_GDI

Definition at line 32 of file thread.c.

◆ NO_SHLWAPI_PATH

#define NO_SHLWAPI_PATH

Definition at line 31 of file thread.c.

◆ NO_SHLWAPI_REG

#define NO_SHLWAPI_REG

Definition at line 30 of file thread.c.

◆ NO_SHLWAPI_STREAM

#define NO_SHLWAPI_STREAM

Definition at line 33 of file thread.c.

◆ NO_SHLWAPI_USER

#define NO_SHLWAPI_USER

Definition at line 34 of file thread.c.

Function Documentation

◆ _SHGetInstanceExplorer()

HRESULT WINAPI _SHGetInstanceExplorer ( IUnknown **  lppUnknown)

Definition at line 104 of file thread.c.

105{
106 /* This function is used within SHLWAPI only to hold the IE reference
107 * for threads created with the CTF_PROCESS_REF flag set. */
108 return SHGetInstanceExplorer(lppUnknown);
109}
HRESULT WINAPI SHGetInstanceExplorer(IUnknown **lpUnknown)
Definition: shellord.c:1721

◆ CreateAllAccessSecurityAttributes()

LPSECURITY_ATTRIBUTES WINAPI CreateAllAccessSecurityAttributes ( LPSECURITY_ATTRIBUTES  lpAttr,
PSECURITY_DESCRIPTOR  lpSec,
DWORD  p3 
)

Definition at line 63 of file thread.c.

67{
68 /* This function is used within SHLWAPI only to create security attributes
69 * for shell semaphores. */
70
71 TRACE("(%p,%p,%08lx)\n", lpAttr, lpSec, p3);
72
73 if (!(GetVersion() & 0x80000000)) /* NT */
74 {
75 if (!lpSec || !lpAttr)
76 return NULL;
77
78 if (InitializeSecurityDescriptor(lpSec, 1))
79 {
81 {
82 lpAttr->nLength = sizeof(SECURITY_ATTRIBUTES);
83 lpAttr->lpSecurityDescriptor = lpSec;
84 lpAttr->bInheritHandle = FALSE;
85 return lpAttr;
86 }
87 }
88 }
89 return NULL;
90}
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
BOOL WINAPI InitializeSecurityDescriptor(PSECURITY_DESCRIPTOR pSecurityDescriptor, DWORD dwRevision)
Definition: security.c:929
struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES
DWORD WINAPI GetVersion(void)
Definition: version.c:1458
BOOL WINAPI SetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR pSecurityDescriptor, BOOL bDaclPresent, PACL pDacl, BOOL bDaclDefaulted)
Definition: sec.c:262
#define TRACE(s)
Definition: solgame.cpp:4
LPVOID lpSecurityDescriptor
Definition: compat.h:193

Referenced by SHGlobalCounterCreateNamedW().

◆ SHGlobalCounterCreate()

HANDLE WINAPI SHGlobalCounterCreate ( REFGUID  guid)

Definition at line 240 of file thread.c.

241{
242 char szName[40];
243
244 TRACE("(%s)\n", debugstr_guid(guid));
245
246 /* Create a named semaphore using the GUID string */
247 SHStringFromGUIDA(guid, szName, sizeof(szName) - 1);
249}
GUID guid
Definition: version.c:147
INT WINAPI SHStringFromGUIDA(REFGUID, LPSTR, INT)
Definition: shimtest.c:51
HANDLE WINAPI SHGlobalCounterCreateNamedA(LPCSTR lpszName, DWORD iInitial)
Definition: thread.c:215
#define debugstr_guid
Definition: kernel32.h:35
static const WCHAR szName[]
Definition: powrprof.c:45

Referenced by CPolicyCache::Initialize(), and SHELL_GetCachedGlobalCounter().

◆ SHGlobalCounterCreateNamedA()

HANDLE WINAPI SHGlobalCounterCreateNamedA ( LPCSTR  lpszName,
DWORD  iInitial 
)

Definition at line 215 of file thread.c.

216{
217 WCHAR szBuff[MAX_PATH];
218
219 TRACE("(%s,%ld)\n", debugstr_a(lpszName), iInitial);
220
221 if (lpszName)
222 MultiByteToWideChar(CP_ACP, 0, lpszName, -1, szBuff, MAX_PATH);
223 return SHGlobalCounterCreateNamedW(lpszName ? szBuff : NULL, iInitial);
224}
#define CP_ACP
Definition: compat.h:109
#define MAX_PATH
Definition: compat.h:34
#define MultiByteToWideChar
Definition: compat.h:110
HANDLE WINAPI SHGlobalCounterCreateNamedW(LPCWSTR lpszName, DWORD iInitial)
Definition: thread.c:179
#define debugstr_a
Definition: kernel32.h:31
short WCHAR
Definition: pedump.c:58

Referenced by SHGlobalCounterCreate().

◆ SHGlobalCounterCreateNamedW()

HANDLE WINAPI SHGlobalCounterCreateNamedW ( LPCWSTR  lpszName,
DWORD  iInitial 
)

Definition at line 179 of file thread.c.

180{
181 static const WCHAR szPrefix[] = { 's', 'h', 'e', 'l', 'l', '.', '\0' };
182 const int iPrefixLen = 6;
183 WCHAR szBuff[MAX_PATH];
185 SECURITY_ATTRIBUTES sAttr, *pSecAttr;
186 HANDLE hRet;
187
188 TRACE("(%s,%ld)\n", debugstr_w(lpszName), iInitial);
189
190 /* Create Semaphore name */
191 memcpy(szBuff, szPrefix, (iPrefixLen + 1) * sizeof(WCHAR));
192 if (lpszName)
193 StrCpyNW(szBuff + iPrefixLen, lpszName, ARRAY_SIZE(szBuff) - iPrefixLen);
194
195 /* Initialise security attributes */
196 pSecAttr = CreateAllAccessSecurityAttributes(&sAttr, &sd, 0);
197
198 if (!(hRet = CreateSemaphoreW(pSecAttr , iInitial, MAXLONG, szBuff)))
200 return hRet;
201}
#define ARRAY_SIZE(A)
Definition: main.h:20
WCHAR *WINAPI StrCpyNW(WCHAR *dst, const WCHAR *src, int count)
Definition: string.c:470
LPSECURITY_ATTRIBUTES WINAPI CreateAllAccessSecurityAttributes(LPSECURITY_ATTRIBUTES lpAttr, PSECURITY_DESCRIPTOR lpSec, DWORD p3)
Definition: thread.c:63
#define debugstr_w
Definition: kernel32.h:32
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static const WCHAR sd[]
Definition: suminfo.c:286
#define SYNCHRONIZE
Definition: nt_native.h:61
HANDLE WINAPI DECLSPEC_HOTPATCH OpenSemaphoreW(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN LPCWSTR lpName)
Definition: synch.c:478
HANDLE WINAPI DECLSPEC_HOTPATCH CreateSemaphoreW(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL, IN LONG lInitialCount, IN LONG lMaximumCount, IN LPCWSTR lpName OPTIONAL)
Definition: synch.c:406
#define MAXLONG
Definition: umtypes.h:116
#define SEMAPHORE_MODIFY_STATE
Definition: winbase.h:164

Referenced by SHGlobalCounterCreateNamedA().

◆ SHGlobalCounterDecrement()

DWORD WINAPI SHGlobalCounterDecrement ( HANDLE  hSem)

Definition at line 163 of file thread.c.

164{
165 DWORD dwOldCount = 0;
166
167 TRACE("(%p)\n", hSem);
168
169 dwOldCount = SHGlobalCounterGetValue(hSem);
170 WaitForSingleObject(hSem, 0);
171 return dwOldCount - 1;
172}
LONG WINAPI SHGlobalCounterGetValue(HANDLE hSem)
Definition: thread.c:122
unsigned long DWORD
Definition: ntddk_ex.h:95
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82

◆ SHGlobalCounterGetValue()

LONG WINAPI SHGlobalCounterGetValue ( HANDLE  hSem)

Definition at line 122 of file thread.c.

123{
124 LONG dwOldCount = 0;
125
126 TRACE("(%p)\n", hSem);
127 ReleaseSemaphore(hSem, 1, &dwOldCount); /* +1 */
128 WaitForSingleObject(hSem, 0); /* -1 */
129 return dwOldCount;
130}
long LONG
Definition: pedump.c:60
BOOL WINAPI DECLSPEC_HOTPATCH ReleaseSemaphore(IN HANDLE hSemaphore, IN LONG lReleaseCount, IN LPLONG lpPreviousCount)
Definition: synch.c:491

Referenced by CPolicyCache::_ValidateCachedResults(), SHELL_QueryRestrictionsChanged(), and SHGlobalCounterDecrement().

◆ SHGlobalCounterIncrement()

LONG WINAPI SHGlobalCounterIncrement ( HANDLE  hSem)

Definition at line 143 of file thread.c.

144{
145 LONG dwOldCount = 0;
146
147 TRACE("(%p)\n", hSem);
148 ReleaseSemaphore(hSem, 1, &dwOldCount);
149 return dwOldCount + 1;
150}

Referenced by SHSettingsChanged().

◆ SHStringFromGUIDA()

INT WINAPI SHStringFromGUIDA ( REFGUID  guid,
LPSTR  lpszDest,
INT  cchMax 
)

Definition at line 51 of file shimtest.c.

52{
53 CHAR Buffer[100] = {0};
54
55 if (CALL_SHIM(1, tSHStringFromGUIDA)(guid, Buffer, sizeof(Buffer)-1))
56 {
57 SHIM_INFO("Original function returned: '%s'\n", Buffer);
58 }
59 else
60 {
61 SHIM_INFO("Original function failed\n");
62 Buffer[0] = '\0';
63 }
64
65 StringCchCopyA(lpszDest, cchMax, "ShimTest:");
67 return 0;
68}
UINT cchMax
WCHAR lpszDest[260]
Definition: bufpool.h:45
char CHAR
Definition: pedump.c:57
#define SHIM_INFO(fmt,...)
Definition: sdbpapi.h:78
INT(WINAPI * tSHStringFromGUIDA)(REFGUID guid, LPSTR lpszDest, INT cchMax)
Definition: shimtest.c:50
STRSAFEAPI StringCchCatA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPCSTR pszSrc)
Definition: strsafe.h:320
STRSAFEAPI StringCchCopyA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPCSTR pszSrc)
Definition: strsafe.h:145

Referenced by SHGlobalCounterCreate().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( shell  )

Variable Documentation

◆ SHLWAPI_ThreadRef_index

DWORD SHLWAPI_ThreadRef_index
extern

Definition at line 34 of file shlwapi_main.c.

Referenced by DllMain().