mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 17:12:57 +00:00
- Add some missing/internal definitions to proper headers.
- Get rid of FLUSH_TLB macros and use KeFlushCurrentTb and the MSVC_compatible instrinsic __invlpg; - Fix some prototypes. - Fixed unsigned/signed mismatches. - Fix SEH usage in ExAllocatePoolWithQuotaTag. svn path=/trunk/; revision=24652
This commit is contained in:
parent
a900757d83
commit
6497d295c3
19 changed files with 130 additions and 111 deletions
|
@ -71,6 +71,30 @@ extern LARGE_INTEGER IoReadTransferCount;
|
||||||
extern LARGE_INTEGER IoWriteTransferCount;
|
extern LARGE_INTEGER IoWriteTransferCount;
|
||||||
extern LARGE_INTEGER IoOtherTransferCount;
|
extern LARGE_INTEGER IoOtherTransferCount;
|
||||||
|
|
||||||
|
typedef STRING LSA_STRING, *PLSA_STRING;
|
||||||
|
typedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE;
|
||||||
|
|
||||||
|
typedef enum _SECURITY_LOGON_TYPE
|
||||||
|
{
|
||||||
|
UndefinedLogonType = 0,
|
||||||
|
Interactive = 2,
|
||||||
|
Network,
|
||||||
|
Batch,
|
||||||
|
Service,
|
||||||
|
Proxy,
|
||||||
|
Unlock,
|
||||||
|
NetworkCleartext,
|
||||||
|
NewCredentials,
|
||||||
|
#if (_WIN32_WINNT >= 0x0501)
|
||||||
|
RemoteInteractive,
|
||||||
|
CachedInteractive,
|
||||||
|
#endif
|
||||||
|
#if (_WIN32_WINNT >= 0x0502)
|
||||||
|
CachedRemoteInteractive,
|
||||||
|
CachedUnlock
|
||||||
|
#endif
|
||||||
|
} SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE;
|
||||||
|
|
||||||
#define ANSI_DOS_STAR ('<')
|
#define ANSI_DOS_STAR ('<')
|
||||||
#define ANSI_DOS_QM ('>')
|
#define ANSI_DOS_QM ('>')
|
||||||
#define ANSI_DOS_DOT ('"')
|
#define ANSI_DOS_DOT ('"')
|
||||||
|
@ -378,6 +402,7 @@ extern LARGE_INTEGER IoOtherTransferCount;
|
||||||
#define TOKEN_HAS_BACKUP_PRIVILEGE 0x02
|
#define TOKEN_HAS_BACKUP_PRIVILEGE 0x02
|
||||||
#define TOKEN_HAS_RESTORE_PRIVILEGE 0x04
|
#define TOKEN_HAS_RESTORE_PRIVILEGE 0x04
|
||||||
#define TOKEN_HAS_ADMIN_GROUP 0x08
|
#define TOKEN_HAS_ADMIN_GROUP 0x08
|
||||||
|
#define TOKEN_WRITE_RESTRICTED 0x08
|
||||||
#define TOKEN_IS_RESTRICTED 0x10
|
#define TOKEN_IS_RESTRICTED 0x10
|
||||||
|
|
||||||
#define VACB_MAPPING_GRANULARITY (0x40000)
|
#define VACB_MAPPING_GRANULARITY (0x40000)
|
||||||
|
@ -1993,7 +2018,7 @@ CcMapData (
|
||||||
IN PFILE_OBJECT FileObject,
|
IN PFILE_OBJECT FileObject,
|
||||||
IN PLARGE_INTEGER FileOffset,
|
IN PLARGE_INTEGER FileOffset,
|
||||||
IN ULONG Length,
|
IN ULONG Length,
|
||||||
IN BOOLEAN Wait,
|
IN ULONG Flags,
|
||||||
OUT PVOID *Bcb,
|
OUT PVOID *Bcb,
|
||||||
OUT PVOID *Buffer
|
OUT PVOID *Buffer
|
||||||
);
|
);
|
||||||
|
@ -2026,6 +2051,8 @@ CcMdlWriteComplete (
|
||||||
IN PMDL MdlChain
|
IN PMDL MdlChain
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#define MAP_WAIT 1
|
||||||
|
|
||||||
NTKERNELAPI
|
NTKERNELAPI
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -2033,11 +2060,7 @@ CcPinMappedData (
|
||||||
IN PFILE_OBJECT FileObject,
|
IN PFILE_OBJECT FileObject,
|
||||||
IN PLARGE_INTEGER FileOffset,
|
IN PLARGE_INTEGER FileOffset,
|
||||||
IN ULONG Length,
|
IN ULONG Length,
|
||||||
#if (VER_PRODUCTBUILD >= 2195)
|
|
||||||
IN ULONG Flags,
|
IN ULONG Flags,
|
||||||
#else
|
|
||||||
IN BOOLEAN Wait,
|
|
||||||
#endif
|
|
||||||
IN OUT PVOID *Bcb
|
IN OUT PVOID *Bcb
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -2048,11 +2071,7 @@ CcPinRead (
|
||||||
IN PFILE_OBJECT FileObject,
|
IN PFILE_OBJECT FileObject,
|
||||||
IN PLARGE_INTEGER FileOffset,
|
IN PLARGE_INTEGER FileOffset,
|
||||||
IN ULONG Length,
|
IN ULONG Length,
|
||||||
#if (VER_PRODUCTBUILD >= 2195)
|
|
||||||
IN ULONG Flags,
|
IN ULONG Flags,
|
||||||
#else
|
|
||||||
IN BOOLEAN Wait,
|
|
||||||
#endif
|
|
||||||
OUT PVOID *Bcb,
|
OUT PVOID *Bcb,
|
||||||
OUT PVOID *Buffer
|
OUT PVOID *Buffer
|
||||||
);
|
);
|
||||||
|
@ -2076,11 +2095,7 @@ CcPreparePinWrite (
|
||||||
IN PLARGE_INTEGER FileOffset,
|
IN PLARGE_INTEGER FileOffset,
|
||||||
IN ULONG Length,
|
IN ULONG Length,
|
||||||
IN BOOLEAN Zero,
|
IN BOOLEAN Zero,
|
||||||
#if (VER_PRODUCTBUILD >= 2195)
|
|
||||||
IN ULONG Flags,
|
IN ULONG Flags,
|
||||||
#else
|
|
||||||
IN BOOLEAN Wait,
|
|
||||||
#endif
|
|
||||||
OUT PVOID *Bcb,
|
OUT PVOID *Bcb,
|
||||||
OUT PVOID *Buffer
|
OUT PVOID *Buffer
|
||||||
);
|
);
|
||||||
|
|
|
@ -186,13 +186,18 @@ extern POBJECT_TYPE NTSYSAPI IoDriverObjectType;
|
||||||
#define DNUF_DONT_SHOW_IN_UI 0x0002
|
#define DNUF_DONT_SHOW_IN_UI 0x0002
|
||||||
#define DNUF_NOT_DISABLEABLE 0x0008
|
#define DNUF_NOT_DISABLEABLE 0x0008
|
||||||
|
|
||||||
|
//
|
||||||
|
// Internal Option Flags
|
||||||
|
//
|
||||||
|
#define IO_ATTACH_DEVICE_API 0x80000000
|
||||||
|
|
||||||
//
|
//
|
||||||
// Undocumented WMI Registration Flags
|
// Undocumented WMI Registration Flags
|
||||||
//
|
//
|
||||||
#define WMIREG_FLAG_TRACE_PROVIDER 0x00010000
|
#define WMIREG_FLAG_TRACE_PROVIDER 0x00010000
|
||||||
#define WMIREG_FLAG_TRACE_NOTIFY_MASK 0x00F00000
|
#define WMIREG_FLAG_TRACE_NOTIFY_MASK 0x00F00000
|
||||||
#define WMIREG_NOTIFY_DISK_IO 0x00100000
|
#define WMIREG_NOTIFY_DISK_IO 0x00100000
|
||||||
#define WMIREG_NOTIFY_TDI_IO 0x00200000
|
#define WMIREG_NOTIFY_TDI_IO 0x00200000
|
||||||
|
|
||||||
//
|
//
|
||||||
// I/O Completion Information Class for NtQueryIoCompletionInformation
|
// I/O Completion Information Class for NtQueryIoCompletionInformation
|
||||||
|
|
|
@ -67,6 +67,11 @@ Author:
|
||||||
#define LDR_LOCK_LOADER_LOCK_FLAG_RAISE_STATUS 0x00000001
|
#define LDR_LOCK_LOADER_LOCK_FLAG_RAISE_STATUS 0x00000001
|
||||||
#define LDR_LOCK_LOADER_LOCK_FLAG_TRY_ONLY 0x00000002
|
#define LDR_LOCK_LOADER_LOCK_FLAG_TRY_ONLY 0x00000002
|
||||||
|
|
||||||
|
//
|
||||||
|
// FIXME: THIS SHOULD *NOT* BE USED!
|
||||||
|
//
|
||||||
|
#define IMAGE_SCN_TYPE_NOLOAD 0x00000002
|
||||||
|
|
||||||
//
|
//
|
||||||
// Loader Data stored in the PEB
|
// Loader Data stored in the PEB
|
||||||
//
|
//
|
||||||
|
|
|
@ -1130,7 +1130,7 @@ typedef enum
|
||||||
#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14
|
#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14
|
||||||
#define IMAGE_SCN_TYPE_REG 0
|
#define IMAGE_SCN_TYPE_REG 0
|
||||||
#define IMAGE_SCN_TYPE_DSECT 1
|
#define IMAGE_SCN_TYPE_DSECT 1
|
||||||
#define IMAGE_SCN_TYPE_NOLOAD 2
|
//#define IMAGE_SCN_TYPE_NOLOAD 2
|
||||||
#define IMAGE_SCN_TYPE_GROUP 4
|
#define IMAGE_SCN_TYPE_GROUP 4
|
||||||
#define IMAGE_SCN_TYPE_NO_PAD 8
|
#define IMAGE_SCN_TYPE_NO_PAD 8
|
||||||
#define IMAGE_SCN_CNT_CODE 32
|
#define IMAGE_SCN_CNT_CODE 32
|
||||||
|
|
|
@ -27,7 +27,7 @@ BOOLEAN STDCALL
|
||||||
CcMapData (IN PFILE_OBJECT FileObject,
|
CcMapData (IN PFILE_OBJECT FileObject,
|
||||||
IN PLARGE_INTEGER FileOffset,
|
IN PLARGE_INTEGER FileOffset,
|
||||||
IN ULONG Length,
|
IN ULONG Length,
|
||||||
IN BOOLEAN Wait,
|
IN ULONG Flags,
|
||||||
OUT PVOID *pBcb,
|
OUT PVOID *pBcb,
|
||||||
OUT PVOID *pBuffer)
|
OUT PVOID *pBuffer)
|
||||||
{
|
{
|
||||||
|
@ -39,9 +39,9 @@ CcMapData (IN PFILE_OBJECT FileObject,
|
||||||
PINTERNAL_BCB iBcb;
|
PINTERNAL_BCB iBcb;
|
||||||
ULONG ROffset;
|
ULONG ROffset;
|
||||||
|
|
||||||
DPRINT("CcMapData(FileObject 0x%p, FileOffset %I64x, Length %d, Wait %d,"
|
DPRINT("CcMapData(FileObject 0x%p, FileOffset %I64x, Length %d, Flags %d,"
|
||||||
" pBcb 0x%p, pBuffer 0x%p)\n", FileObject, FileOffset->QuadPart,
|
" pBcb 0x%p, pBuffer 0x%p)\n", FileObject, FileOffset->QuadPart,
|
||||||
Length, Wait, pBcb, pBuffer);
|
Length, Flags, pBcb, pBuffer);
|
||||||
|
|
||||||
ReadOffset = (ULONG)FileOffset->QuadPart;
|
ReadOffset = (ULONG)FileOffset->QuadPart;
|
||||||
Bcb = FileObject->SectionObjectPointer->SharedCacheMap;
|
Bcb = FileObject->SectionObjectPointer->SharedCacheMap;
|
||||||
|
@ -67,7 +67,7 @@ CcMapData (IN PFILE_OBJECT FileObject,
|
||||||
}
|
}
|
||||||
if (!Valid)
|
if (!Valid)
|
||||||
{
|
{
|
||||||
if (!Wait)
|
if (!(Flags & MAP_WAIT))
|
||||||
{
|
{
|
||||||
CcRosReleaseCacheSegment(Bcb, CacheSeg, FALSE, FALSE, FALSE);
|
CcRosReleaseCacheSegment(Bcb, CacheSeg, FALSE, FALSE, FALSE);
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
|
|
|
@ -62,7 +62,7 @@ FsRtlInsertPerFileObjectContext(IN PFILE_OBJECT FileObject,
|
||||||
*/
|
*/
|
||||||
PFSRTL_PER_FILEOBJECT_CONTEXT
|
PFSRTL_PER_FILEOBJECT_CONTEXT
|
||||||
NTAPI
|
NTAPI
|
||||||
FsRtlRemovePerFileObjectContext(IN PFSRTL_ADVANCED_FCB_HEADER PerFileObjectContext,
|
FsRtlRemovePerFileObjectContext(IN PFILE_OBJECT PerFileObjectContext,
|
||||||
IN PVOID OwnerId OPTIONAL,
|
IN PVOID OwnerId OPTIONAL,
|
||||||
IN PVOID InstanceId OPTIONAL)
|
IN PVOID InstanceId OPTIONAL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -514,10 +514,10 @@ _ExRundownCompleted(IN PEX_RUNDOWN_REF RunRef)
|
||||||
*--*/
|
*--*/
|
||||||
VOID
|
VOID
|
||||||
FORCEINLINE
|
FORCEINLINE
|
||||||
ExInitializePushLock(IN PEX_PUSH_LOCK PushLock)
|
ExInitializePushLock(IN PULONG_PTR PushLock)
|
||||||
{
|
{
|
||||||
/* Set the value to 0 */
|
/* Set the value to 0 */
|
||||||
PushLock->Value = 0;
|
*PushLock = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*++
|
/*++
|
||||||
|
|
|
@ -39,6 +39,13 @@
|
||||||
: /* no outputs */ \
|
: /* no outputs */ \
|
||||||
: "q" (X));
|
: "q" (X));
|
||||||
|
|
||||||
|
#define Ke386SetTr(X) __asm__ __volatile__("ltr %%ax" : :"a" (X));
|
||||||
|
|
||||||
|
#define Ke386GetTr(X) \
|
||||||
|
__asm__("str %0\n\t" \
|
||||||
|
: /* no outputs */ \
|
||||||
|
: "m" (X));
|
||||||
|
|
||||||
#define Ke386SaveFlags(x) __asm__ __volatile__("pushfl ; popl %0":"=g" (x): /* no input */)
|
#define Ke386SaveFlags(x) __asm__ __volatile__("pushfl ; popl %0":"=g" (x): /* no input */)
|
||||||
#define Ke386RestoreFlags(x) __asm__ __volatile__("pushl %0 ; popfl": /* no output */ :"g" (x):"memory")
|
#define Ke386RestoreFlags(x) __asm__ __volatile__("pushl %0 ; popfl": /* no output */ :"g" (x):"memory")
|
||||||
|
|
||||||
|
@ -58,8 +65,6 @@
|
||||||
|
|
||||||
#define _Ke386SetDr(N,X) __asm__ __volatile__("movl %0,%%dr" #N : :"r" (X));
|
#define _Ke386SetDr(N,X) __asm__ __volatile__("movl %0,%%dr" #N : :"r" (X));
|
||||||
|
|
||||||
#define Ke386SetTr(X) __asm__ __volatile__("ltr %%ax" : :"a" (X));
|
|
||||||
#define Ke386GetTr(X) __asm__ __volatile__("str %%ax" : :"a" (X));
|
|
||||||
|
|
||||||
static inline void Ki386Cpuid(ULONG Op, PULONG Eax, PULONG Ebx, PULONG Ecx, PULONG Edx)
|
static inline void Ki386Cpuid(ULONG Op, PULONG Eax, PULONG Ebx, PULONG Ecx, PULONG Edx)
|
||||||
{
|
{
|
||||||
|
@ -69,25 +74,11 @@ static inline void Ki386Cpuid(ULONG Op, PULONG Eax, PULONG Ebx, PULONG Ecx, PULO
|
||||||
}
|
}
|
||||||
|
|
||||||
#define Ke386Rdmsr(msr,val1,val2) __asm__ __volatile__("rdmsr" : "=a" (val1), "=d" (val2) : "c" (msr))
|
#define Ke386Rdmsr(msr,val1,val2) __asm__ __volatile__("rdmsr" : "=a" (val1), "=d" (val2) : "c" (msr))
|
||||||
|
|
||||||
#define Ke386Wrmsr(msr,val1,val2) __asm__ __volatile__("wrmsr" : /* no outputs */ : "c" (msr), "a" (val1), "d" (val2))
|
#define Ke386Wrmsr(msr,val1,val2) __asm__ __volatile__("wrmsr" : /* no outputs */ : "c" (msr), "a" (val1), "d" (val2))
|
||||||
|
|
||||||
#define FLUSH_TLB { \
|
#define Ke386HaltProcessor() __asm__("hlt\n\t");
|
||||||
unsigned int tmp; \
|
|
||||||
__asm__ __volatile__( \
|
|
||||||
"movl %%cr3,%0\n\t" \
|
|
||||||
"movl %0,%%cr3\n\t" \
|
|
||||||
: "=r" (tmp) \
|
|
||||||
:: "memory"); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define FLUSH_TLB_ONE(addr) __asm__ __volatile__( \
|
#define Ke386FnInit() __asm__("fninit\n\t");
|
||||||
"invlpg %0" \
|
|
||||||
: \
|
|
||||||
: "m" (*(volatile long *) (addr)))
|
|
||||||
|
|
||||||
#define Ke386HaltProcessor() __asm__("hlt\n\t");
|
|
||||||
#define Ke386FnInit() __asm__("fninit\n\t");
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// DR Macros
|
// DR Macros
|
||||||
|
|
|
@ -197,14 +197,14 @@ LONG
|
||||||
FASTCALL
|
FASTCALL
|
||||||
ObDereferenceObjectEx(
|
ObDereferenceObjectEx(
|
||||||
IN PVOID Object,
|
IN PVOID Object,
|
||||||
IN ULONG Count
|
IN LONG Count
|
||||||
);
|
);
|
||||||
|
|
||||||
LONG
|
LONG
|
||||||
FASTCALL
|
FASTCALL
|
||||||
ObReferenceObjectEx(
|
ObReferenceObjectEx(
|
||||||
IN PVOID Object,
|
IN PVOID Object,
|
||||||
IN ULONG Count
|
IN LONG Count
|
||||||
);
|
);
|
||||||
|
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
|
|
|
@ -314,11 +314,9 @@ IopSaveBootLogToFile(VOID)
|
||||||
ExReleaseResourceLite(&IopBootLogResource);
|
ExReleaseResourceLite(&IopBootLogResource);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#if defined (__GNUC__)
|
|
||||||
Status = IopWriteLogFile(L"ReactOS "KERNEL_VERSION_STR);
|
//Status = IopWriteLogFile(L"ReactOS "KERNEL_VERSION_STR);
|
||||||
#elif defined (_MSC_VER)
|
|
||||||
Status = IopWriteLogFile("ReactOS "KERNEL_VERSION_STR);
|
|
||||||
#endif
|
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT1("IopWriteLogFile() failed (Status %lx)\n", Status);
|
DPRINT1("IopWriteLogFile() failed (Status %lx)\n", Status);
|
||||||
|
|
|
@ -1331,7 +1331,7 @@ KdpGdbEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord,
|
||||||
DPRINT("Thread %p acquired mutex\n", PsGetCurrentThread());
|
DPRINT("Thread %p acquired mutex\n", PsGetCurrentThread());
|
||||||
|
|
||||||
/* Disable hardware debugging while we are inside the stub */
|
/* Disable hardware debugging while we are inside the stub */
|
||||||
_Ke386SetDr(7, 0);
|
Ke386SetDr7(0);
|
||||||
GspUnloadBreakpoints(TrapFrame);
|
GspUnloadBreakpoints(TrapFrame);
|
||||||
|
|
||||||
/* Make sure we're debugging the current thread. */
|
/* Make sure we're debugging the current thread. */
|
||||||
|
|
|
@ -525,7 +525,7 @@ KiGetMachineBootPointers(IN PKGDTENTRY *Gdt,
|
||||||
*Idt = (PKIDTENTRY)IdtDescriptor.Base;
|
*Idt = (PKIDTENTRY)IdtDescriptor.Base;
|
||||||
|
|
||||||
/* Get TSS and FS Selectors */
|
/* Get TSS and FS Selectors */
|
||||||
Ke386GetTr(&Tr);
|
Ke386GetTr(Tr);
|
||||||
if (Tr != KGDT_TSS) Tr = KGDT_TSS; // FIXME: HACKHACK
|
if (Tr != KGDT_TSS) Tr = KGDT_TSS; // FIXME: HACKHACK
|
||||||
Fs = Ke386GetFs();
|
Fs = Ke386GetFs();
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ KeSetBaseGdtSelector(ULONG Entry,
|
||||||
|
|
||||||
KeAcquireSpinLock(&GdtLock, &oldIrql);
|
KeAcquireSpinLock(&GdtLock, &oldIrql);
|
||||||
|
|
||||||
Gdt = KeGetPcr()->GDT;
|
Gdt = (PUSHORT)KeGetPcr()->GDT;
|
||||||
Entry = (Entry & (~0x3)) / 2;
|
Entry = (Entry & (~0x3)) / 2;
|
||||||
|
|
||||||
Gdt[Entry + 1] = (USHORT)(((ULONG)Base) & 0xffff);
|
Gdt[Entry + 1] = (USHORT)(((ULONG)Base) & 0xffff);
|
||||||
|
|
|
@ -85,11 +85,11 @@ MiFlushTlbIpiRoutine(PVOID Address)
|
||||||
}
|
}
|
||||||
else if (Address == (PVOID)0xfffffffe)
|
else if (Address == (PVOID)0xfffffffe)
|
||||||
{
|
{
|
||||||
FLUSH_TLB;
|
KeFlushCurrentTb();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FLUSH_TLB_ONE(Address);
|
__invlpg(Address);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +112,7 @@ MiFlushTlb(PULONG Pt, PVOID Address)
|
||||||
#else
|
#else
|
||||||
if ((Pt && MmUnmapPageTable(Pt)) || Address >= MmSystemRangeStart)
|
if ((Pt && MmUnmapPageTable(Pt)) || Address >= MmSystemRangeStart)
|
||||||
{
|
{
|
||||||
FLUSH_TLB_ONE(Address);
|
__invlpg(Address);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -2220,7 +2220,7 @@ MmCreateHyperspaceMapping(PFN_TYPE Page)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Address = (PVOID)((ULONG_PTR)HYPERSPACE + i * PAGE_SIZE);
|
Address = (PVOID)((ULONG_PTR)HYPERSPACE + i * PAGE_SIZE);
|
||||||
FLUSH_TLB_ONE(Address);
|
__invlpg(Address);
|
||||||
return Address;
|
return Address;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2242,7 +2242,7 @@ MmChangeHyperspaceMapping(PVOID Address, PFN_TYPE NewPage)
|
||||||
Entry = InterlockedExchange((PLONG)ADDR_TO_PTE(Address), PFN_TO_PTE(NewPage) | PA_PRESENT | PA_READWRITE);
|
Entry = InterlockedExchange((PLONG)ADDR_TO_PTE(Address), PFN_TO_PTE(NewPage) | PA_PRESENT | PA_READWRITE);
|
||||||
Pfn = PTE_TO_PFN(Entry);
|
Pfn = PTE_TO_PFN(Entry);
|
||||||
}
|
}
|
||||||
FLUSH_TLB_ONE(Address);
|
__invlpg(Address);
|
||||||
return Pfn;
|
return Pfn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2264,7 +2264,7 @@ MmDeleteHyperspaceMapping(PVOID Address)
|
||||||
Entry = InterlockedExchange((PLONG)ADDR_TO_PTE(Address), 0);
|
Entry = InterlockedExchange((PLONG)ADDR_TO_PTE(Address), 0);
|
||||||
Pfn = PTE_TO_PFN(Entry);
|
Pfn = PTE_TO_PFN(Entry);
|
||||||
}
|
}
|
||||||
FLUSH_TLB_ONE(Address);
|
__invlpg(Address);
|
||||||
return Pfn;
|
return Pfn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -140,7 +140,7 @@ VOID STDCALL
|
||||||
MmUnmapIoSpace (IN PVOID BaseAddress,
|
MmUnmapIoSpace (IN PVOID BaseAddress,
|
||||||
IN ULONG NumberOfBytes)
|
IN ULONG NumberOfBytes)
|
||||||
{
|
{
|
||||||
ULONG Offset;
|
LONG Offset;
|
||||||
PVOID Address = BaseAddress;
|
PVOID Address = BaseAddress;
|
||||||
|
|
||||||
Offset = (ULONG_PTR)Address % PAGE_SIZE;
|
Offset = (ULONG_PTR)Address % PAGE_SIZE;
|
||||||
|
|
|
@ -161,41 +161,51 @@ ExAllocatePoolWithTagPriority(
|
||||||
return ExAllocatePoolWithTag(PoolType, NumberOfBytes, Tag);
|
return ExAllocatePoolWithTag(PoolType, NumberOfBytes, Tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_SEH_DEFINE_LOCALS(ExQuotaPoolVars)
|
||||||
|
{
|
||||||
|
PVOID Block;
|
||||||
|
};
|
||||||
|
|
||||||
|
_SEH_FILTER(FreeAndGoOn)
|
||||||
|
{
|
||||||
|
_SEH_ACCESS_LOCALS(ExQuotaPoolVars);
|
||||||
|
|
||||||
|
/* Couldn't charge, so free the pool and let the caller SEH manage */
|
||||||
|
ExFreePool(_SEH_VAR(Block));
|
||||||
|
return EXCEPTION_CONTINUE_SEARCH;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
PVOID STDCALL
|
PVOID
|
||||||
|
NTAPI
|
||||||
ExAllocatePoolWithQuotaTag (IN POOL_TYPE PoolType,
|
ExAllocatePoolWithQuotaTag (IN POOL_TYPE PoolType,
|
||||||
IN ULONG NumberOfBytes,
|
IN ULONG NumberOfBytes,
|
||||||
IN ULONG Tag)
|
IN ULONG Tag)
|
||||||
{
|
{
|
||||||
PVOID Block;
|
|
||||||
PEPROCESS Process;
|
PEPROCESS Process;
|
||||||
|
_SEH_DECLARE_LOCALS(ExQuotaPoolVars);
|
||||||
|
|
||||||
/* Allocate the Pool First */
|
/* Allocate the Pool First */
|
||||||
Block = EiAllocatePool(PoolType,
|
_SEH_VAR(Block) = EiAllocatePool(PoolType,
|
||||||
NumberOfBytes,
|
NumberOfBytes,
|
||||||
Tag,
|
Tag,
|
||||||
&ExAllocatePoolWithQuotaTag);
|
&ExAllocatePoolWithQuotaTag);
|
||||||
|
|
||||||
/* "Quota is not charged to the thread for allocations >= PAGE_SIZE" - OSR Docs */
|
/* "Quota is not charged to the thread for allocations >= PAGE_SIZE" - OSR Docs */
|
||||||
if (!(NumberOfBytes >= PAGE_SIZE)) {
|
if (!(NumberOfBytes >= PAGE_SIZE))
|
||||||
|
{
|
||||||
/* Get the Current Process */
|
/* Get the Current Process */
|
||||||
Process = PsGetCurrentProcess();
|
Process = PsGetCurrentProcess();
|
||||||
|
|
||||||
/* PsChargePoolQuota returns an exception, so this needs SEH */
|
/* PsChargePoolQuota returns an exception, so this needs SEH */
|
||||||
_SEH_FILTER(FreeAndGoOn)
|
|
||||||
{
|
|
||||||
/* Couldn't charge, so free the pool and let the caller SEH manage */
|
|
||||||
ExFreePool(Block);
|
|
||||||
return EXCEPTION_CONTINUE_SEARCH;
|
|
||||||
}
|
|
||||||
|
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
//* FIXME: Is there a way to get the actual Pool size allocated from the pool header? */
|
/* FIXME: Is there a way to get the actual Pool size allocated from the pool header? */
|
||||||
PsChargePoolQuota(Process, PoolType & PAGED_POOL_MASK, NumberOfBytes);
|
PsChargePoolQuota(Process,
|
||||||
|
PoolType & PAGED_POOL_MASK,
|
||||||
|
NumberOfBytes);
|
||||||
}
|
}
|
||||||
_SEH_EXCEPT(FreeAndGoOn)
|
_SEH_EXCEPT(FreeAndGoOn)
|
||||||
{
|
{
|
||||||
|
@ -205,7 +215,8 @@ ExAllocatePoolWithQuotaTag (IN POOL_TYPE PoolType,
|
||||||
_SEH_END;
|
_SEH_END;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Block;
|
/* Return the allocated block */
|
||||||
|
return _SEH_VAR(Block);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -70,7 +70,7 @@ ObpDeferObjectDeletion(IN PVOID Object)
|
||||||
LONG
|
LONG
|
||||||
FASTCALL
|
FASTCALL
|
||||||
ObReferenceObjectEx(IN PVOID Object,
|
ObReferenceObjectEx(IN PVOID Object,
|
||||||
IN ULONG Count)
|
IN LONG Count)
|
||||||
{
|
{
|
||||||
/* Increment the reference count and return the count now */
|
/* Increment the reference count and return the count now */
|
||||||
return InterlockedExchangeAdd(&OBJECT_TO_OBJECT_HEADER(Object)->
|
return InterlockedExchangeAdd(&OBJECT_TO_OBJECT_HEADER(Object)->
|
||||||
|
@ -81,10 +81,10 @@ ObReferenceObjectEx(IN PVOID Object,
|
||||||
LONG
|
LONG
|
||||||
FASTCALL
|
FASTCALL
|
||||||
ObDereferenceObjectEx(IN PVOID Object,
|
ObDereferenceObjectEx(IN PVOID Object,
|
||||||
IN ULONG Count)
|
IN LONG Count)
|
||||||
{
|
{
|
||||||
POBJECT_HEADER Header;
|
POBJECT_HEADER Header;
|
||||||
ULONG NewCount;
|
LONG NewCount;
|
||||||
|
|
||||||
/* Extract the object header */
|
/* Extract the object header */
|
||||||
Header = OBJECT_TO_OBJECT_HEADER(Object);
|
Header = OBJECT_TO_OBJECT_HEADER(Object);
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
#include <internal/debug.h>
|
#include <internal/debug.h>
|
||||||
|
|
||||||
/* LsaCallAuthenticationPackage@28 */
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
|
@ -29,7 +28,6 @@ NTSTATUS STDCALL LsaCallAuthenticationPackage (
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* LsaDeregisterLogonProcess@8 */
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
|
@ -41,7 +39,6 @@ NTSTATUS STDCALL LsaDeregisterLogonProcess (
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* LsaFreeReturnBuffer@4 */
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -57,31 +54,29 @@ NTSTATUS STDCALL LsaFreeReturnBuffer (PVOID Buffer)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* LsaLogonUser@56 */
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS STDCALL LsaLogonUser (
|
NTSTATUS
|
||||||
ULONG Unknown0,
|
NTAPI
|
||||||
ULONG Unknown1,
|
LsaLogonUser(IN HANDLE LsaHandle,
|
||||||
ULONG Unknown2,
|
IN PLSA_STRING OriginName,
|
||||||
ULONG Unknown3,
|
IN SECURITY_LOGON_TYPE LogonType,
|
||||||
ULONG Unknown4,
|
IN ULONG AuthenticationPackage,
|
||||||
ULONG Unknown5,
|
IN PVOID AuthenticationInformation,
|
||||||
ULONG Unknown6,
|
IN ULONG AuthenticationInformationLength,
|
||||||
ULONG Unknown7,
|
IN PTOKEN_GROUPS LocalGroups OPTIONAL,
|
||||||
ULONG Unknown8,
|
IN PTOKEN_SOURCE SourceContext,
|
||||||
ULONG Unknown9,
|
OUT PVOID *ProfileBuffer,
|
||||||
ULONG Unknown10,
|
OUT PULONG ProfileBufferLength,
|
||||||
ULONG Unknown11,
|
OUT PLUID LogonId,
|
||||||
ULONG Unknown12,
|
OUT PHANDLE Token,
|
||||||
ULONG Unknown13
|
OUT PQUOTA_LIMITS Quotas,
|
||||||
)
|
OUT PNTSTATUS SubStatus)
|
||||||
{
|
{
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* LsaLookupAuthenticationPackage@12 */
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
|
@ -94,15 +89,14 @@ NTSTATUS STDCALL LsaLookupAuthenticationPackage (
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* LsaRegisterLogonProcess@12 */
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS STDCALL LsaRegisterLogonProcess (
|
NTSTATUS
|
||||||
ULONG Unknown0,
|
NTAPI
|
||||||
ULONG Unknown1,
|
LsaRegisterLogonProcess (IN PLSA_STRING LogonProcessName,
|
||||||
ULONG Unknown2
|
OUT PHANDLE LsaHandle,
|
||||||
)
|
OUT PLSA_OPERATIONAL_MODE SecurityMode)
|
||||||
{
|
{
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2415,7 +2415,7 @@ SeTokenIsAdmin(
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
return (((PTOKEN)Token)->TokenFlags & TOKEN_HAS_ADMIN_GROUP) != 0;
|
return (((PTOKEN)Token)->TokenFlags & TOKEN_WRITE_RESTRICTED) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue