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 ExReleasePushLockExclusive(PEX_PUSH_LOCK PushLock
)
119 EX_PUSH_LOCK OldValue
;
121 /* Unlock the pushlock */
122 OldValue
.Value
= InterlockedExchangeAddSizeT((PSIZE_T
)PushLock
,
123 -(SSIZE_T
)EX_PUSH_LOCK_LOCK
);
124 /* Check if anyone is waiting on it and it's not already waking */
125 if ((OldValue
.Waiting
) && !(OldValue
.Waking
))
128 ExfTryToWakePushLock(PushLock
);
134 _ExInitializePushLock(PEX_PUSH_LOCK Lock
)
136 *(PULONG_PTR
)Lock
= 0;
138 #define ExInitializePushLock _ExInitializePushLock
141 IntSafeCopyUnicodeString(PUNICODE_STRING Dest
,
142 PUNICODE_STRING Source
);
145 IntSafeCopyUnicodeStringTerminateNULL(PUNICODE_STRING Dest
,
146 PUNICODE_STRING Source
);
148 HBITMAP NTAPI
UserLoadImage(PCWSTR
);
150 BOOL NTAPI
W32kDosPathNameToNtPathName(PCWSTR
, PUNICODE_STRING
);
152 #define ROUND_DOWN(n, align) \
153 (((ULONG)n) & ~((align) - 1l))
155 #define ROUND_UP(n, align) \
156 ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
158 #define LIST_FOR_EACH(elem, list, type, field) \
159 for ((elem) = CONTAINING_RECORD((list)->Flink, type, field); \
160 &(elem)->field != (list) && ((&((elem)->field)) != NULL); \
161 (elem) = CONTAINING_RECORD((elem)->field.Flink, type, field))
163 #define LIST_FOR_EACH_SAFE(cursor, cursor2, list, type, field) \
164 for ((cursor) = CONTAINING_RECORD((list)->Flink, type, field), \
165 (cursor2) = CONTAINING_RECORD((cursor)->field.Flink, type, field); \
166 &(cursor)->field != (list) && ((&((cursor)->field)) != NULL); \
167 (cursor) = (cursor2), \
168 (cursor2) = CONTAINING_RECORD((cursor)->field.Flink, type, field))