reactos/win32ss/gdi/ntgdi/misc.h
Katayama Hirofumi MZ 3768f0893d
[WIN32SS] Fix const-ness of registry helper functions (#6525)
Improve code quality.
JIRA issue: CORE-19360
- Fix const-ness of the arguments
  of win32k registry helper functions.
- Compact UserIsIMMEnabled function.
2024-02-23 21:26:12 +09:00

147 lines
3.2 KiB
C

#pragma once
typedef struct INTENG_ENTER_LEAVE_TAG
{
/* Contents is private to EngEnter/EngLeave */
SURFOBJ *DestObj;
SURFOBJ *OutputObj;
HBITMAP OutputBitmap;
CLIPOBJ *TrivialClipObj;
RECTL DestRect;
BOOL ReadOnly;
} INTENG_ENTER_LEAVE, *PINTENG_ENTER_LEAVE;
extern BOOL APIENTRY IntEngEnter(PINTENG_ENTER_LEAVE EnterLeave,
SURFOBJ *DestObj,
RECTL *DestRect,
BOOL ReadOnly,
POINTL *Translate,
SURFOBJ **OutputObj);
extern BOOL APIENTRY IntEngLeave(PINTENG_ENTER_LEAVE EnterLeave);
extern HGDIOBJ StockObjects[];
extern USHORT gusLanguageID;
BOOL InitializeGreCSRSS(VOID);
USHORT FASTCALL UserGetLanguageID(VOID);
PVOID APIENTRY HackSecureVirtualMemory(IN PVOID,IN SIZE_T,IN ULONG,OUT PVOID *);
VOID APIENTRY HackUnsecureVirtualMemory(IN PVOID);
NTSTATUS
NTAPI
RegOpenKey(
LPCWSTR pwszKeyName,
PHKEY phkey);
NTSTATUS
NTAPI
RegQueryValue(
IN HKEY hkey,
IN PCWSTR pwszValueName,
IN ULONG ulType,
OUT PVOID pvData,
IN OUT PULONG pcbValue);
VOID
NTAPI
RegWriteSZ(HKEY hkey, PCWSTR pwszValue, PWSTR pwszData);
VOID
NTAPI
RegWriteDWORD(HKEY hkey, PCWSTR pwszValue, DWORD dwData);
BOOL
NTAPI
RegReadDWORD(HKEY hkey, PCWSTR pwszValue, PDWORD pdwData);
DWORD
NTAPI
RegGetSectionDWORD(LPCWSTR pszSection, PCWSTR pszValue, DWORD dwDefault);
VOID
FASTCALL
SetLastNtError(_In_ NTSTATUS Status);
typedef struct _GDI_POOL *PGDI_POOL;
PGDI_POOL
NTAPI
GdiPoolCreate(
ULONG cjAllocSize,
ULONG ulTag);
VOID
NTAPI
GdiPoolDestroy(PGDI_POOL pPool);
PVOID
NTAPI
GdiPoolAllocate(
PGDI_POOL pPool);
VOID
NTAPI
GdiPoolFree(
PGDI_POOL pPool,
PVOID pvAlloc);
FORCEINLINE
VOID
ExAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock)
{
/* Try acquiring the lock */
if (InterlockedBitTestAndSet((PLONG)PushLock, EX_PUSH_LOCK_LOCK_V))
{
/* Someone changed it, use the slow path */
ExfAcquirePushLockExclusive(PushLock);
}
}
FORCEINLINE
BOOLEAN
ExTryAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock)
{
/* Try acquiring the lock */
return !InterlockedBitTestAndSet((PLONG)PushLock, EX_PUSH_LOCK_LOCK_V);
}
FORCEINLINE
VOID
ExReleasePushLockExclusive(PEX_PUSH_LOCK PushLock)
{
EX_PUSH_LOCK OldValue;
/* Unlock the pushlock */
OldValue.Value = InterlockedExchangeAddSizeT((PSIZE_T)PushLock,
-(SSIZE_T)EX_PUSH_LOCK_LOCK);
/* Check if anyone is waiting on it and it's not already waking */
if ((OldValue.Waiting) && !(OldValue.Waking))
{
/* Wake it up */
ExfTryToWakePushLock(PushLock);
}
}
FORCEINLINE
VOID
_ExInitializePushLock(PEX_PUSH_LOCK Lock)
{
*(PULONG_PTR)Lock = 0;
}
#define ExInitializePushLock _ExInitializePushLock
NTSTATUS FASTCALL
IntSafeCopyUnicodeString(PUNICODE_STRING Dest,
PUNICODE_STRING Source);
NTSTATUS FASTCALL
IntSafeCopyUnicodeStringTerminateNULL(PUNICODE_STRING Dest,
PUNICODE_STRING Source);
HBITMAP NTAPI UserLoadImage(PCWSTR);
BOOL NTAPI W32kDosPathNameToNtPathName(PCWSTR, PUNICODE_STRING);