reactos/win32ss/gdi/ntgdi/misc.h
Katayama Hirofumi MZ 530d26a1f4
[NTGDI][NTUSER] Initial support of NtGdiRemoveFontResourceW (#7877)
Enable the users to delete fonts.
JIRA issue: CORE-17684
- Add IntDeleteRegFontEntry helper function.
- Add RegDeleteValueW and RegEnumValueW helper
  functions in win32ss/user/ntuser/misc/registry.c.
- Add some code to IntGdiRemoveFontResourceSingle
  function.
2025-05-06 12:38:54 +09:00

159 lines
3.4 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);
NTSTATUS NTAPI
RegDeleteValueW(_In_ HKEY hKey, _In_ LPCWSTR pszValueName);
NTSTATUS NTAPI
RegEnumValueW(
_In_ HKEY hKey,
_In_ ULONG Index,
_Out_opt_ LPWSTR Name,
_Out_opt_ PULONG NameLength,
_Out_opt_ PULONG Type,
_Out_opt_ PVOID Data,
_Out_opt_ PULONG DataLength);
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);