3 typedef struct INTENG_ENTER_LEAVE_TAG
5 /* Contents is private to EngEnter/EngLeave */
9 CLIPOBJ
*TrivialClipObj
;
12 } INTENG_ENTER_LEAVE
, *PINTENG_ENTER_LEAVE
;
14 extern BOOL APIENTRY
IntEngEnter(PINTENG_ENTER_LEAVE EnterLeave
,
21 extern BOOL APIENTRY
IntEngLeave(PINTENG_ENTER_LEAVE EnterLeave
);
23 extern HGDIOBJ StockObjects
[];
24 extern SHORT gusLanguageID
;
26 SHORT FASTCALL
UserGetLanguageID(VOID
);
27 VOID FASTCALL
IntUserManualGuiCheck(LONG Check
);
28 PVOID APIENTRY
HackSecureVirtualMemory(IN PVOID
,IN SIZE_T
,IN ULONG
,OUT PVOID
*);
29 VOID APIENTRY
HackUnsecureVirtualMemory(IN PVOID
);
41 IN PCWSTR pwszValueName
,
44 IN OUT PULONG pcbValue
);
48 RegWriteSZ(HKEY hkey
, PWSTR pwszValue
, PWSTR pwszData
);
52 RegWriteDWORD(HKEY hkey
, PWSTR pwszValue
, DWORD dwData
);
56 RegReadDWORD(HKEY hkey
, PWSTR pwszValue
, PDWORD pdwData
);
61 IN PCWSTR pwszKeyName
,
62 IN PCWSTR pwszValueName
,
70 IN PCWSTR pwszKeyName
,
71 IN PCWSTR pwszValueName
,
80 typedef struct _GDI_POOL
*PGDI_POOL
;
90 GdiPoolDestroy(PGDI_POOL pPool
);
105 ExAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock
)
107 /* Try acquiring the lock */
108 if (InterlockedBitTestAndSet((PLONG
)PushLock
, EX_PUSH_LOCK_LOCK_V
))
110 /* Someone changed it, use the slow path */
111 ExfAcquirePushLockExclusive(PushLock
);
117 ExTryAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock
)
119 /* Try acquiring the lock */
120 return !InterlockedBitTestAndSet((PLONG
)PushLock
, EX_PUSH_LOCK_LOCK_V
);
125 ExReleasePushLockExclusive(PEX_PUSH_LOCK PushLock
)
127 EX_PUSH_LOCK OldValue
;
129 /* Unlock the pushlock */
130 OldValue
.Value
= InterlockedExchangeAddSizeT((PSIZE_T
)PushLock
,
131 -(SSIZE_T
)EX_PUSH_LOCK_LOCK
);
132 /* Check if anyone is waiting on it and it's not already waking */
133 if ((OldValue
.Waiting
) && !(OldValue
.Waking
))
136 ExfTryToWakePushLock(PushLock
);
142 _ExInitializePushLock(PEX_PUSH_LOCK Lock
)
144 *(PULONG_PTR
)Lock
= 0;
146 #define ExInitializePushLock _ExInitializePushLock
149 IntSafeCopyUnicodeString(PUNICODE_STRING Dest
,
150 PUNICODE_STRING Source
);
153 IntSafeCopyUnicodeStringTerminateNULL(PUNICODE_STRING Dest
,
154 PUNICODE_STRING Source
);
156 HBITMAP NTAPI
UserLoadImage(PCWSTR
);
158 BOOL NTAPI
W32kDosPathNameToNtPathName(PCWSTR
, PUNICODE_STRING
);
160 #define ROUND_DOWN(n, align) \
161 (((ULONG)n) & ~((align) - 1l))
163 #define ROUND_UP(n, align) \
164 ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
166 #define LIST_FOR_EACH(elem, list, type, field) \
167 for ((elem) = CONTAINING_RECORD((list)->Flink, type, field); \
168 &(elem)->field != (list) && ((&((elem)->field)) != NULL); \
169 (elem) = CONTAINING_RECORD((elem)->field.Flink, type, field))
171 #define LIST_FOR_EACH_SAFE(cursor, cursor2, list, type, field) \
172 for ((cursor) = CONTAINING_RECORD((list)->Flink, type, field), \
173 (cursor2) = CONTAINING_RECORD((cursor)->field.Flink, type, field); \
174 &(cursor)->field != (list); \
175 (cursor) = (cursor2), \
176 (cursor2) = CONTAINING_RECORD((cursor)->field.Flink, type, field))