mirror of
https://github.com/reactos/reactos.git
synced 2024-06-29 01:12:06 +00:00
Partial merge from the ROX-U branch (various fixes for Visual C++ compilation, see logs for r16198 and r16208)
svn path=/trunk/; revision=16212
This commit is contained in:
parent
1af2b69826
commit
321df5d69c
|
@ -136,7 +136,7 @@ ReadCacheSegmentChain(PBCB Bcb, ULONG ReadOffset, ULONG Length,
|
||||||
while (current2 != NULL && !current2->Valid && current_size < MAX_RW_LENGTH)
|
while (current2 != NULL && !current2->Valid && current_size < MAX_RW_LENGTH)
|
||||||
{
|
{
|
||||||
PVOID address = current2->BaseAddress;
|
PVOID address = current2->BaseAddress;
|
||||||
for (i = 0; i < (Bcb->CacheSegmentSize / PAGE_SIZE); i++, address += PAGE_SIZE)
|
for (i = 0; i < (Bcb->CacheSegmentSize / PAGE_SIZE); i++, address = RVA(address, PAGE_SIZE))
|
||||||
{
|
{
|
||||||
*MdlPages++ = MmGetPfnForProcess(NULL, address);
|
*MdlPages++ = MmGetPfnForProcess(NULL, address);
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,9 +39,8 @@ CcGetDirtyPages (
|
||||||
IN PVOID Context2
|
IN PVOID Context2
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
|
||||||
|
|
||||||
LARGE_INTEGER i;
|
LARGE_INTEGER i;
|
||||||
|
UNIMPLEMENTED;
|
||||||
i.QuadPart = 0;
|
i.QuadPart = 0;
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
@ -69,9 +68,8 @@ CcGetLsnForFileObject (
|
||||||
OUT PLARGE_INTEGER OldestLsn OPTIONAL
|
OUT PLARGE_INTEGER OldestLsn OPTIONAL
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
|
||||||
|
|
||||||
LARGE_INTEGER i;
|
LARGE_INTEGER i;
|
||||||
|
UNIMPLEMENTED;
|
||||||
i.QuadPart = 0;
|
i.QuadPart = 0;
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
/* GLOBALS *******************************************************************/
|
/* GLOBALS *******************************************************************/
|
||||||
|
|
||||||
POBJECT_TYPE EXPORTED ExEventPairObjectType = NULL;
|
POBJECT_TYPE ExEventPairObjectType = NULL;
|
||||||
|
|
||||||
static GENERIC_MAPPING ExEventPairMapping = {
|
static GENERIC_MAPPING ExEventPairMapping = {
|
||||||
STANDARD_RIGHTS_READ,
|
STANDARD_RIGHTS_READ,
|
||||||
|
|
|
@ -496,7 +496,7 @@ ExpInitializeExecutive(VOID)
|
||||||
KeCreateApplicationProcessorIdleThread(KeNumberProcessors);
|
KeCreateApplicationProcessorIdleThread(KeNumberProcessors);
|
||||||
|
|
||||||
/* Allocate a stack for use when booting the processor */
|
/* Allocate a stack for use when booting the processor */
|
||||||
ProcessorStack = Ki386InitialStackArray[((int)KeNumberProcessors)] + MM_STACK_SIZE;
|
ProcessorStack = RVA(Ki386InitialStackArray[((int)KeNumberProcessors)], MM_STACK_SIZE);
|
||||||
|
|
||||||
/* Tell HAL a new CPU is being started */
|
/* Tell HAL a new CPU is being started */
|
||||||
HalStartNextProcessor(0, (ULONG)ProcessorStack - 2*sizeof(FX_SAVE_AREA));
|
HalStartNextProcessor(0, (ULONG)ProcessorStack - 2*sizeof(FX_SAVE_AREA));
|
||||||
|
|
|
@ -835,6 +835,10 @@ ObpGetNextHandleByProcessCount(PSYSTEM_HANDLE_TABLE_ENTRY_INFO pshi,
|
||||||
/* Class 16 - Handle Information */
|
/* Class 16 - Handle Information */
|
||||||
QSI_DEF(SystemHandleInformation)
|
QSI_DEF(SystemHandleInformation)
|
||||||
{
|
{
|
||||||
|
PEPROCESS pr, syspr;
|
||||||
|
int curSize, i = 0;
|
||||||
|
ULONG hCount = 0;
|
||||||
|
|
||||||
PSYSTEM_HANDLE_INFORMATION Shi =
|
PSYSTEM_HANDLE_INFORMATION Shi =
|
||||||
(PSYSTEM_HANDLE_INFORMATION) Buffer;
|
(PSYSTEM_HANDLE_INFORMATION) Buffer;
|
||||||
|
|
||||||
|
@ -848,10 +852,6 @@ QSI_DEF(SystemHandleInformation)
|
||||||
|
|
||||||
DPRINT("SystemHandleInformation 1\n");
|
DPRINT("SystemHandleInformation 1\n");
|
||||||
|
|
||||||
PEPROCESS pr, syspr;
|
|
||||||
int curSize, i = 0;
|
|
||||||
ULONG hCount = 0;
|
|
||||||
|
|
||||||
/* First Calc Size from Count. */
|
/* First Calc Size from Count. */
|
||||||
syspr = PsGetNextProcess(NULL);
|
syspr = PsGetNextProcess(NULL);
|
||||||
pr = syspr;
|
pr = syspr;
|
||||||
|
@ -937,6 +937,7 @@ QSI_DEF(SystemObjectInformation)
|
||||||
/* Class 18 - Information */
|
/* Class 18 - Information */
|
||||||
QSI_DEF(SystemPageFileInformation)
|
QSI_DEF(SystemPageFileInformation)
|
||||||
{
|
{
|
||||||
|
UNICODE_STRING FileName; /* FIXME */
|
||||||
SYSTEM_PAGEFILE_INFORMATION *Spfi = (SYSTEM_PAGEFILE_INFORMATION *) Buffer;
|
SYSTEM_PAGEFILE_INFORMATION *Spfi = (SYSTEM_PAGEFILE_INFORMATION *) Buffer;
|
||||||
|
|
||||||
if (Size < sizeof (SYSTEM_PAGEFILE_INFORMATION))
|
if (Size < sizeof (SYSTEM_PAGEFILE_INFORMATION))
|
||||||
|
@ -945,7 +946,6 @@ QSI_DEF(SystemPageFileInformation)
|
||||||
return (STATUS_INFO_LENGTH_MISMATCH);
|
return (STATUS_INFO_LENGTH_MISMATCH);
|
||||||
}
|
}
|
||||||
|
|
||||||
UNICODE_STRING FileName; /* FIXME */
|
|
||||||
RtlInitUnicodeString(&FileName, NULL); /* FIXME */
|
RtlInitUnicodeString(&FileName, NULL); /* FIXME */
|
||||||
|
|
||||||
/* FIXME */
|
/* FIXME */
|
||||||
|
|
|
@ -149,7 +149,7 @@ static UCHAR LegalAnsiCharacterArray[] =
|
||||||
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL /* 0x7f */
|
FSRTL_FAT_LEGAL | FSRTL_HPFS_LEGAL | FSRTL_NTFS_LEGAL /* 0x7f */
|
||||||
};
|
};
|
||||||
|
|
||||||
PUCHAR EXPORTED FsRtlLegalAnsiCharacterArray = LegalAnsiCharacterArray;
|
PUCHAR FsRtlLegalAnsiCharacterArray = LegalAnsiCharacterArray;
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
#ifndef __NTOSKRNL_INCLUDE_INTERNAL_ARCH_KE_H
|
#ifndef __NTOSKRNL_INCLUDE_INTERNAL_ARCH_KE_H
|
||||||
#define __NTOSKRNL_INCLUDE_INTERNAL_ARCH_KE_H
|
#define __NTOSKRNL_INCLUDE_INTERNAL_ARCH_KE_H
|
||||||
|
|
||||||
#ifdef i386
|
#ifdef _M_IX86
|
||||||
#include "../i386/ke.h"
|
#include "../i386/ke.h"
|
||||||
#else
|
#else
|
||||||
#error "Unknown processor"
|
#error "Unknown processor"
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
#ifndef __NTOSKRNL_INCLUDE_INTERNAL_ARCH_MM_H
|
#ifndef __NTOSKRNL_INCLUDE_INTERNAL_ARCH_MM_H
|
||||||
#define __NTOSKRNL_INCLUDE_INTERNAL_ARCH_MM_H
|
#define __NTOSKRNL_INCLUDE_INTERNAL_ARCH_MM_H
|
||||||
|
|
||||||
#ifdef i386
|
#ifdef _M_IX86
|
||||||
#include <internal/i386/mm.h>
|
#include <internal/i386/mm.h>
|
||||||
#else
|
#else
|
||||||
#error "Unknown processor"
|
#error "Unknown processor"
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
#ifndef __NTOSKRNL_INCLUDE_INTERNAL_ARCH_PS_H
|
#ifndef __NTOSKRNL_INCLUDE_INTERNAL_ARCH_PS_H
|
||||||
#define __NTOSKRNL_INCLUDE_INTERNAL_ARCH_PS_H
|
#define __NTOSKRNL_INCLUDE_INTERNAL_ARCH_PS_H
|
||||||
|
|
||||||
#ifdef i386
|
#ifdef _M_IX86
|
||||||
#include <internal/i386/ps.h>
|
#include <internal/i386/ps.h>
|
||||||
#define KiArchContextSwitch KiSwapContext
|
#define KiArchContextSwitch KiSwapContext
|
||||||
#define KiArchInitThreadWithContext Ke386InitThreadWithContext
|
#define KiArchInitThreadWithContext Ke386InitThreadWithContext
|
||||||
|
|
|
@ -189,8 +189,7 @@ KeCreateApplicationProcessorIdleThread(ULONG Id);
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
STDCALL
|
(STDCALL*PKSYSTEM_ROUTINE)(PKSTART_ROUTINE StartRoutine,
|
||||||
(*PKSYSTEM_ROUTINE)(PKSTART_ROUTINE StartRoutine,
|
|
||||||
PVOID StartContext);
|
PVOID StartContext);
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
|
@ -215,7 +214,7 @@ KiThreadStartup(PKSYSTEM_ROUTINE SystemRoutine,
|
||||||
#define LOCK "lock ; "
|
#define LOCK "lock ; "
|
||||||
#else
|
#else
|
||||||
#define LOCK ""
|
#define LOCK ""
|
||||||
#define KeGetCurrentIrql(X) (((PKPCR)KPCR_BASE)->Irql)
|
#define KeGetCurrentIrql() (((PKPCR)KPCR_BASE)->Irql)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
|
|
|
@ -224,13 +224,13 @@ struct _KEXCEPTION_FRAME;
|
||||||
|
|
||||||
/* MACROS *************************************************************************/
|
/* MACROS *************************************************************************/
|
||||||
|
|
||||||
#define KeEnterCriticalRegion(X) \
|
#define KeEnterCriticalRegion() \
|
||||||
{ \
|
{ \
|
||||||
PKTHREAD _Thread = KeGetCurrentThread(); \
|
PKTHREAD _Thread = KeGetCurrentThread(); \
|
||||||
if (_Thread) _Thread->KernelApcDisable--; \
|
if (_Thread) _Thread->KernelApcDisable--; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define KeLeaveCriticalRegion(X) \
|
#define KeLeaveCriticalRegion() \
|
||||||
{ \
|
{ \
|
||||||
PKTHREAD _Thread = KeGetCurrentThread(); \
|
PKTHREAD _Thread = KeGetCurrentThread(); \
|
||||||
if((_Thread) && (++_Thread->KernelApcDisable == 0)) \
|
if((_Thread) && (++_Thread->KernelApcDisable == 0)) \
|
||||||
|
@ -354,8 +354,8 @@ extern PLOADER_MODULE CachedModules[MaximumCachedModuleType];
|
||||||
VOID STDCALL
|
VOID STDCALL
|
||||||
DbgBreakPointNoBugCheck(VOID);
|
DbgBreakPointNoBugCheck(VOID);
|
||||||
|
|
||||||
STDCALL
|
|
||||||
VOID
|
VOID
|
||||||
|
STDCALL
|
||||||
KeInitializeProfile(struct _KPROFILE* Profile,
|
KeInitializeProfile(struct _KPROFILE* Profile,
|
||||||
struct _KPROCESS* Process,
|
struct _KPROCESS* Process,
|
||||||
PVOID ImageBase,
|
PVOID ImageBase,
|
||||||
|
@ -364,21 +364,21 @@ KeInitializeProfile(struct _KPROFILE* Profile,
|
||||||
KPROFILE_SOURCE ProfileSource,
|
KPROFILE_SOURCE ProfileSource,
|
||||||
KAFFINITY Affinity);
|
KAFFINITY Affinity);
|
||||||
|
|
||||||
STDCALL
|
|
||||||
VOID
|
VOID
|
||||||
|
STDCALL
|
||||||
KeStartProfile(struct _KPROFILE* Profile,
|
KeStartProfile(struct _KPROFILE* Profile,
|
||||||
PVOID Buffer);
|
PVOID Buffer);
|
||||||
|
|
||||||
STDCALL
|
|
||||||
VOID
|
VOID
|
||||||
|
STDCALL
|
||||||
KeStopProfile(struct _KPROFILE* Profile);
|
KeStopProfile(struct _KPROFILE* Profile);
|
||||||
|
|
||||||
STDCALL
|
|
||||||
ULONG
|
ULONG
|
||||||
|
STDCALL
|
||||||
KeQueryIntervalProfile(KPROFILE_SOURCE ProfileSource);
|
KeQueryIntervalProfile(KPROFILE_SOURCE ProfileSource);
|
||||||
|
|
||||||
STDCALL
|
|
||||||
VOID
|
VOID
|
||||||
|
STDCALL
|
||||||
KeSetIntervalProfile(KPROFILE_SOURCE ProfileSource,
|
KeSetIntervalProfile(KPROFILE_SOURCE ProfileSource,
|
||||||
ULONG Interval);
|
ULONG Interval);
|
||||||
|
|
||||||
|
|
|
@ -160,7 +160,7 @@ typedef struct _ETHREAD
|
||||||
ULONG OwnsSessionWorkingSetShared:1;
|
ULONG OwnsSessionWorkingSetShared:1;
|
||||||
ULONG ApcNeeded:1;
|
ULONG ApcNeeded:1;
|
||||||
};
|
};
|
||||||
ULONG SameThreadPassiveFlags; /* 248 */
|
ULONG SameThreadApcFlags; /* 248 */
|
||||||
};
|
};
|
||||||
UCHAR ForwardClusterOnly; /* 24C */
|
UCHAR ForwardClusterOnly; /* 24C */
|
||||||
UCHAR DisablePageFaultClustering; /* 24D */
|
UCHAR DisablePageFaultClustering; /* 24D */
|
||||||
|
|
|
@ -337,8 +337,8 @@ INIT_FUNCTION
|
||||||
IopDisplayLoadingMessage(PVOID ServiceName,
|
IopDisplayLoadingMessage(PVOID ServiceName,
|
||||||
BOOLEAN Unicode)
|
BOOLEAN Unicode)
|
||||||
{
|
{
|
||||||
if (SetupMode) return;
|
|
||||||
CHAR TextBuffer[256];
|
CHAR TextBuffer[256];
|
||||||
|
if (SetupMode) return;
|
||||||
if (Unicode)
|
if (Unicode)
|
||||||
{
|
{
|
||||||
sprintf(TextBuffer, "Loading %S...\n", (PWCHAR)ServiceName);
|
sprintf(TextBuffer, "Loading %S...\n", (PWCHAR)ServiceName);
|
||||||
|
|
|
@ -15,16 +15,16 @@
|
||||||
|
|
||||||
/* DATA ********************************************************************/
|
/* DATA ********************************************************************/
|
||||||
|
|
||||||
POBJECT_TYPE EXPORTED IoDeviceObjectType = NULL;
|
POBJECT_TYPE IoDeviceObjectType = NULL;
|
||||||
POBJECT_TYPE EXPORTED IoFileObjectType = NULL;
|
POBJECT_TYPE IoFileObjectType = NULL;
|
||||||
extern POBJECT_TYPE IoControllerObjectType;
|
extern POBJECT_TYPE IoControllerObjectType;
|
||||||
ULONG EXPORTED IoReadOperationCount = 0;
|
ULONG IoReadOperationCount = 0;
|
||||||
LARGE_INTEGER EXPORTED IoReadTransferCount = {{0, 0}};
|
LARGE_INTEGER IoReadTransferCount = {{0, 0}};
|
||||||
ULONG EXPORTED IoWriteOperationCount = 0;
|
ULONG IoWriteOperationCount = 0;
|
||||||
LARGE_INTEGER EXPORTED IoWriteTransferCount = {{0, 0}};
|
LARGE_INTEGER IoWriteTransferCount = {{0, 0}};
|
||||||
ULONG IoOtherOperationCount = 0;
|
ULONG IoOtherOperationCount = 0;
|
||||||
LARGE_INTEGER IoOtherTransferCount = {{0, 0}};
|
LARGE_INTEGER IoOtherTransferCount = {{0, 0}};
|
||||||
KSPIN_LOCK EXPORTED IoStatisticsLock = 0;
|
KSPIN_LOCK IoStatisticsLock = 0;
|
||||||
|
|
||||||
GENERIC_MAPPING IopFileMapping = {
|
GENERIC_MAPPING IopFileMapping = {
|
||||||
FILE_GENERIC_READ,
|
FILE_GENERIC_READ,
|
||||||
|
|
|
@ -619,13 +619,6 @@ IoBuildAsynchronousFsdRequest(ULONG MajorFunction,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Probe and Lock */
|
/* Probe and Lock */
|
||||||
_SEH_FILTER(FreeAndGoOn)
|
|
||||||
{
|
|
||||||
/* Free the IRP and its MDL */
|
|
||||||
IoFreeMdl(Irp->MdlAddress);
|
|
||||||
IoFreeIrp(Irp);
|
|
||||||
return EXCEPTION_CONTINUE_SEARCH;
|
|
||||||
}
|
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
/* Do the probe */
|
/* Do the probe */
|
||||||
|
|
|
@ -19,8 +19,8 @@
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
STDCALL
|
||||||
IoWMIRegistrationControl(
|
IoWMIRegistrationControl(
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
IN PDEVICE_OBJECT DeviceObject,
|
||||||
IN ULONG Action
|
IN ULONG Action
|
||||||
|
@ -33,8 +33,8 @@ IoWMIRegistrationControl(
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
STDCALL
|
||||||
IoWMIAllocateInstanceIds(
|
IoWMIAllocateInstanceIds(
|
||||||
IN GUID *Guid,
|
IN GUID *Guid,
|
||||||
IN ULONG InstanceCount,
|
IN ULONG InstanceCount,
|
||||||
|
@ -48,8 +48,8 @@ IoWMIAllocateInstanceIds(
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
STDCALL
|
||||||
IoWMISuggestInstanceName(
|
IoWMISuggestInstanceName(
|
||||||
IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
|
IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
|
||||||
IN PUNICODE_STRING SymbolicLinkName OPTIONAL,
|
IN PUNICODE_STRING SymbolicLinkName OPTIONAL,
|
||||||
|
@ -64,8 +64,8 @@ IoWMISuggestInstanceName(
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
STDCALL
|
||||||
IoWMIWriteEvent(
|
IoWMIWriteEvent(
|
||||||
IN PVOID WnodeEventItem
|
IN PVOID WnodeEventItem
|
||||||
)
|
)
|
||||||
|
@ -77,8 +77,8 @@ IoWMIWriteEvent(
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
NTSTATUS
|
||||||
NTSTATUS IoWMIOpenBlock(
|
STDCALL IoWMIOpenBlock(
|
||||||
IN GUID *DataBlockGuid,
|
IN GUID *DataBlockGuid,
|
||||||
IN ULONG DesiredAccess,
|
IN ULONG DesiredAccess,
|
||||||
OUT PVOID *DataBlockObject
|
OUT PVOID *DataBlockObject
|
||||||
|
@ -91,8 +91,8 @@ NTSTATUS IoWMIOpenBlock(
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
NTSTATUS
|
||||||
NTSTATUS IoWMIQueryAllData(
|
STDCALL IoWMIQueryAllData(
|
||||||
IN PVOID DataBlockObject,
|
IN PVOID DataBlockObject,
|
||||||
IN OUT ULONG *InOutBufferSize,
|
IN OUT ULONG *InOutBufferSize,
|
||||||
OUT PVOID OutBuffer
|
OUT PVOID OutBuffer
|
||||||
|
@ -105,8 +105,8 @@ NTSTATUS IoWMIQueryAllData(
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
STDCALL
|
||||||
IoWMIQueryAllDataMultiple(
|
IoWMIQueryAllDataMultiple(
|
||||||
IN PVOID *DataBlockObjectList,
|
IN PVOID *DataBlockObjectList,
|
||||||
IN ULONG ObjectCount,
|
IN ULONG ObjectCount,
|
||||||
|
@ -121,8 +121,8 @@ IoWMIQueryAllDataMultiple(
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
STDCALL
|
||||||
IoWMIQuerySingleInstance(
|
IoWMIQuerySingleInstance(
|
||||||
IN PVOID DataBlockObject,
|
IN PVOID DataBlockObject,
|
||||||
IN PUNICODE_STRING InstanceName,
|
IN PUNICODE_STRING InstanceName,
|
||||||
|
@ -137,8 +137,8 @@ IoWMIQuerySingleInstance(
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
STDCALL
|
||||||
IoWMIQuerySingleInstanceMultiple(
|
IoWMIQuerySingleInstanceMultiple(
|
||||||
IN PVOID *DataBlockObjectList,
|
IN PVOID *DataBlockObjectList,
|
||||||
IN PUNICODE_STRING InstanceNames,
|
IN PUNICODE_STRING InstanceNames,
|
||||||
|
@ -154,8 +154,8 @@ IoWMIQuerySingleInstanceMultiple(
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
STDCALL
|
||||||
IoWMISetSingleInstance(
|
IoWMISetSingleInstance(
|
||||||
IN PVOID DataBlockObject,
|
IN PVOID DataBlockObject,
|
||||||
IN PUNICODE_STRING InstanceName,
|
IN PUNICODE_STRING InstanceName,
|
||||||
|
@ -171,8 +171,8 @@ IoWMISetSingleInstance(
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
STDCALL
|
||||||
IoWMISetSingleItem(
|
IoWMISetSingleItem(
|
||||||
IN PVOID DataBlockObject,
|
IN PVOID DataBlockObject,
|
||||||
IN PUNICODE_STRING InstanceName,
|
IN PUNICODE_STRING InstanceName,
|
||||||
|
@ -189,8 +189,8 @@ IoWMISetSingleItem(
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
STDCALL
|
||||||
IoWMIExecuteMethod(
|
IoWMIExecuteMethod(
|
||||||
IN PVOID DataBlockObject,
|
IN PVOID DataBlockObject,
|
||||||
IN PUNICODE_STRING InstanceName,
|
IN PUNICODE_STRING InstanceName,
|
||||||
|
@ -207,8 +207,8 @@ IoWMIExecuteMethod(
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
STDCALL
|
||||||
IoWMISetNotificationCallback(
|
IoWMISetNotificationCallback(
|
||||||
IN PVOID Object,
|
IN PVOID Object,
|
||||||
IN WMI_NOTIFICATION_CALLBACK Callback,
|
IN WMI_NOTIFICATION_CALLBACK Callback,
|
||||||
|
@ -222,8 +222,8 @@ IoWMISetNotificationCallback(
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
STDCALL
|
||||||
IoWMIHandleToInstanceName(
|
IoWMIHandleToInstanceName(
|
||||||
IN PVOID DataBlockObject,
|
IN PVOID DataBlockObject,
|
||||||
IN HANDLE FileHandle,
|
IN HANDLE FileHandle,
|
||||||
|
@ -237,8 +237,8 @@ IoWMIHandleToInstanceName(
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
STDCALL
|
||||||
IoWMIDeviceObjectToInstanceName(
|
IoWMIDeviceObjectToInstanceName(
|
||||||
IN PVOID DataBlockObject,
|
IN PVOID DataBlockObject,
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
IN PDEVICE_OBJECT DeviceObject,
|
||||||
|
|
|
@ -89,7 +89,7 @@ KiIpiServiceRoutine(IN PKTRAP_FRAME TrapFrame,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
((VOID STDCALL(*)(PVOID))(Prcb->SignalDone->WorkerRoutine))(Prcb->SignalDone->CurrentPacket[0]);
|
((VOID (STDCALL*)(PVOID))(Prcb->SignalDone->WorkerRoutine))(Prcb->SignalDone->CurrentPacket[0]);
|
||||||
Ke386TestAndClearBit(KeGetCurrentProcessorNumber(), &Prcb->SignalDone->TargetSet);
|
Ke386TestAndClearBit(KeGetCurrentProcessorNumber(), &Prcb->SignalDone->TargetSet);
|
||||||
if (InterlockedCompareExchangeUL(&Prcb->SignalDone->CurrentPacket[2], 0, 0))
|
if (InterlockedCompareExchangeUL(&Prcb->SignalDone->CurrentPacket[2], 0, 0))
|
||||||
{
|
{
|
||||||
|
@ -116,7 +116,7 @@ KiIpiServiceRoutine(IN PKTRAP_FRAME TrapFrame,
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
STDCALL
|
STDCALL
|
||||||
KiIpiSendPacket(ULONG TargetSet, VOID STDCALL (*WorkerRoutine)(PVOID), PVOID Argument, ULONG Count, BOOLEAN Synchronize)
|
KiIpiSendPacket(ULONG TargetSet, VOID (STDCALL*WorkerRoutine)(PVOID), PVOID Argument, ULONG Count, BOOLEAN Synchronize)
|
||||||
{
|
{
|
||||||
ULONG i, Processor, CurrentProcessor;
|
ULONG i, Processor, CurrentProcessor;
|
||||||
PKPRCB Prcb, CurrentPrcb;
|
PKPRCB Prcb, CurrentPrcb;
|
||||||
|
|
|
@ -245,8 +245,8 @@ KeRemoveByKeyDeviceQueue (IN PKDEVICE_QUEUE DeviceQueue,
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
PKDEVICE_QUEUE_ENTRY
|
PKDEVICE_QUEUE_ENTRY
|
||||||
|
STDCALL
|
||||||
KeRemoveByKeyDeviceQueueIfBusy(IN PKDEVICE_QUEUE DeviceQueue,
|
KeRemoveByKeyDeviceQueueIfBusy(IN PKDEVICE_QUEUE DeviceQueue,
|
||||||
IN ULONG SortKey)
|
IN ULONG SortKey)
|
||||||
{
|
{
|
||||||
|
|
|
@ -82,7 +82,9 @@ KeGetRecommendedSharedDataAlignment(VOID)
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
|
#ifdef __GNUC__
|
||||||
__attribute((noinline))
|
__attribute((noinline))
|
||||||
|
#endif
|
||||||
KiSystemStartup(BOOLEAN BootProcessor)
|
KiSystemStartup(BOOLEAN BootProcessor)
|
||||||
{
|
{
|
||||||
DPRINT("KiSystemStartup(%d)\n", BootProcessor);
|
DPRINT("KiSystemStartup(%d)\n", BootProcessor);
|
||||||
|
|
|
@ -22,8 +22,8 @@ ULONG KiProfileTimeInterval = 78125; /* Default resolution 7.8ms (sysinternals)
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
||||||
STDCALL
|
|
||||||
VOID
|
VOID
|
||||||
|
STDCALL
|
||||||
KeInitializeProfile(PKPROFILE Profile,
|
KeInitializeProfile(PKPROFILE Profile,
|
||||||
PKPROCESS Process,
|
PKPROCESS Process,
|
||||||
PVOID ImageBase,
|
PVOID ImageBase,
|
||||||
|
@ -40,14 +40,14 @@ KeInitializeProfile(PKPROFILE Profile,
|
||||||
Profile->Process = Process;
|
Profile->Process = Process;
|
||||||
Profile->RegionStart = ImageBase;
|
Profile->RegionStart = ImageBase;
|
||||||
Profile->BucketShift = BucketSize - 2; /* See ntinternals.net -- Alex */
|
Profile->BucketShift = BucketSize - 2; /* See ntinternals.net -- Alex */
|
||||||
Profile->RegionEnd = (PVOID)(ULONG_PTR)ImageBase + ImageSize;
|
Profile->RegionEnd = (PVOID)((ULONG_PTR)ImageBase + ImageSize);
|
||||||
Profile->Active = FALSE;
|
Profile->Active = FALSE;
|
||||||
Profile->Source = ProfileSource;
|
Profile->Source = ProfileSource;
|
||||||
Profile->Affinity = Affinity;
|
Profile->Affinity = Affinity;
|
||||||
}
|
}
|
||||||
|
|
||||||
STDCALL
|
|
||||||
VOID
|
VOID
|
||||||
|
STDCALL
|
||||||
KeStartProfile(PKPROFILE Profile,
|
KeStartProfile(PKPROFILE Profile,
|
||||||
PVOID Buffer)
|
PVOID Buffer)
|
||||||
{
|
{
|
||||||
|
@ -133,8 +133,8 @@ KeStartProfile(PKPROFILE Profile,
|
||||||
if (!FreeBuffer) ExFreePool(SourceBuffer);
|
if (!FreeBuffer) ExFreePool(SourceBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
STDCALL
|
|
||||||
VOID
|
VOID
|
||||||
|
STDCALL
|
||||||
KeStopProfile(PKPROFILE Profile)
|
KeStopProfile(PKPROFILE Profile)
|
||||||
{
|
{
|
||||||
KIRQL OldIrql;
|
KIRQL OldIrql;
|
||||||
|
@ -178,8 +178,8 @@ KeStopProfile(PKPROFILE Profile)
|
||||||
if (CurrentSource) ExFreePool(CurrentSource);
|
if (CurrentSource) ExFreePool(CurrentSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
STDCALL
|
|
||||||
ULONG
|
ULONG
|
||||||
|
STDCALL
|
||||||
KeQueryIntervalProfile(KPROFILE_SOURCE ProfileSource)
|
KeQueryIntervalProfile(KPROFILE_SOURCE ProfileSource)
|
||||||
{
|
{
|
||||||
/* Check if this is the timer profile */
|
/* Check if this is the timer profile */
|
||||||
|
@ -200,8 +200,8 @@ KeQueryIntervalProfile(KPROFILE_SOURCE ProfileSource)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
STDCALL
|
|
||||||
VOID
|
VOID
|
||||||
|
STDCALL
|
||||||
KeSetIntervalProfile(KPROFILE_SOURCE ProfileSource,
|
KeSetIntervalProfile(KPROFILE_SOURCE ProfileSource,
|
||||||
ULONG Interval)
|
ULONG Interval)
|
||||||
{
|
{
|
||||||
|
@ -224,8 +224,8 @@ KeSetIntervalProfile(KPROFILE_SOURCE ProfileSource,
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
VOID
|
VOID
|
||||||
|
STDCALL
|
||||||
KeProfileInterrupt(PKTRAP_FRAME TrapFrame)
|
KeProfileInterrupt(PKTRAP_FRAME TrapFrame)
|
||||||
{
|
{
|
||||||
/* Called from HAL for Timer Profiling */
|
/* Called from HAL for Timer Profiling */
|
||||||
|
@ -257,7 +257,7 @@ KiParseProfileList(IN PKTRAP_FRAME TrapFrame,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the Pointer to the Bucket Value representing this EIP */
|
/* Get the Pointer to the Bucket Value representing this EIP */
|
||||||
BucketValue = (PULONG)(((ULONG_PTR)(Profile->Buffer +
|
BucketValue = (PULONG)((((ULONG_PTR)Profile->Buffer +
|
||||||
(TrapFrame->Eip - (ULONG_PTR)Profile->RegionStart))
|
(TrapFrame->Eip - (ULONG_PTR)Profile->RegionStart))
|
||||||
>> Profile->BucketShift) &~ 0x3);
|
>> Profile->BucketShift) &~ 0x3);
|
||||||
|
|
||||||
|
@ -276,8 +276,8 @@ KiParseProfileList(IN PKTRAP_FRAME TrapFrame,
|
||||||
* from the trap frame into the buffer, while using buckets and
|
* from the trap frame into the buffer, while using buckets and
|
||||||
* shifting like we specified. -- Alex
|
* shifting like we specified. -- Alex
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
VOID
|
VOID
|
||||||
|
STDCALL
|
||||||
KeProfileInterruptWithSource(IN PKTRAP_FRAME TrapFrame,
|
KeProfileInterruptWithSource(IN PKTRAP_FRAME TrapFrame,
|
||||||
IN KPROFILE_SOURCE Source)
|
IN KPROFILE_SOURCE Source)
|
||||||
{
|
{
|
||||||
|
@ -291,8 +291,8 @@ KeProfileInterruptWithSource(IN PKTRAP_FRAME TrapFrame,
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
VOID
|
VOID
|
||||||
|
STDCALL
|
||||||
KeSetProfileIrql(IN KIRQL ProfileIrql)
|
KeSetProfileIrql(IN KIRQL ProfileIrql)
|
||||||
{
|
{
|
||||||
/* Set the IRQL at which Profiling will run */
|
/* Set the IRQL at which Profiling will run */
|
||||||
|
|
|
@ -910,7 +910,7 @@ LdrPEProcessModule(
|
||||||
Protect = PAGE_EXECUTE_READWRITE;
|
Protect = PAGE_EXECUTE_READWRITE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (PageAddress < DriverBase + DriverSize)
|
if (PageAddress < RVA(DriverBase, DriverSize))
|
||||||
{
|
{
|
||||||
MmSetPageProtect(NULL, PageAddress, Protect);
|
MmSetPageProtect(NULL, PageAddress, Protect);
|
||||||
}
|
}
|
||||||
|
@ -937,14 +937,14 @@ LdrPEProcessModule(
|
||||||
PageAddress = (PVOID)((ULONG_PTR)PageAddress + PAGE_SIZE);
|
PageAddress = (PVOID)((ULONG_PTR)PageAddress + PAGE_SIZE);
|
||||||
while ((ULONG_PTR)PageAddress + PAGE_SIZE < (ULONG_PTR)BaseAddress + Length)
|
while ((ULONG_PTR)PageAddress + PAGE_SIZE < (ULONG_PTR)BaseAddress + Length)
|
||||||
{
|
{
|
||||||
if (PageAddress < DriverBase + DriverSize)
|
if (PageAddress < RVA(DriverBase, DriverSize))
|
||||||
{
|
{
|
||||||
MmSetPageProtect(NULL, PageAddress, Protect);
|
MmSetPageProtect(NULL, PageAddress, Protect);
|
||||||
}
|
}
|
||||||
PageAddress = (PVOID)((ULONG_PTR)PageAddress + PAGE_SIZE);
|
PageAddress = (PVOID)((ULONG_PTR)PageAddress + PAGE_SIZE);
|
||||||
}
|
}
|
||||||
if (PageAddress < (PVOID)((ULONG_PTR)BaseAddress + Length) &&
|
if (PageAddress < (PVOID)((ULONG_PTR)BaseAddress + Length) &&
|
||||||
PageAddress < DriverBase + DriverSize)
|
PageAddress < RVA(DriverBase, DriverSize))
|
||||||
{
|
{
|
||||||
Protect = LdrLookupPageProtection(PageAddress, DriverBase, &PENtHeaders->FileHeader, PESectionHeaders);
|
Protect = LdrLookupPageProtection(PageAddress, DriverBase, &PENtHeaders->FileHeader, PESectionHeaders);
|
||||||
MmSetPageProtect(NULL, PageAddress, Protect);
|
MmSetPageProtect(NULL, PageAddress, Protect);
|
||||||
|
@ -1214,20 +1214,20 @@ LdrPEPerformRelocations (
|
||||||
Delta = (ULONG_PTR)DriverBase - NtHeaders->OptionalHeader.ImageBase;
|
Delta = (ULONG_PTR)DriverBase - NtHeaders->OptionalHeader.ImageBase;
|
||||||
RelocationDir = (PIMAGE_BASE_RELOCATION)((ULONG_PTR)DriverBase + RelocationDDir->VirtualAddress);
|
RelocationDir = (PIMAGE_BASE_RELOCATION)((ULONG_PTR)DriverBase + RelocationDDir->VirtualAddress);
|
||||||
RelocationEnd = (PIMAGE_BASE_RELOCATION)((ULONG_PTR)RelocationDir + RelocationDDir->Size);
|
RelocationEnd = (PIMAGE_BASE_RELOCATION)((ULONG_PTR)RelocationDir + RelocationDDir->Size);
|
||||||
MaxAddress = DriverBase + DriverSize;
|
MaxAddress = RVA(DriverBase, DriverSize);
|
||||||
|
|
||||||
while (RelocationDir < RelocationEnd &&
|
while (RelocationDir < RelocationEnd &&
|
||||||
RelocationDir->SizeOfBlock > 0)
|
RelocationDir->SizeOfBlock > 0)
|
||||||
{
|
{
|
||||||
Count = (RelocationDir->SizeOfBlock - sizeof(IMAGE_BASE_RELOCATION)) / sizeof(USHORT);
|
Count = (RelocationDir->SizeOfBlock - sizeof(IMAGE_BASE_RELOCATION)) / sizeof(USHORT);
|
||||||
Address = DriverBase + RelocationDir->VirtualAddress;
|
Address = RVA(DriverBase, RelocationDir->VirtualAddress);
|
||||||
TypeOffset = (PUSHORT)(RelocationDir + 1);
|
TypeOffset = (PUSHORT)(RelocationDir + 1);
|
||||||
|
|
||||||
for (i = 0; i < Count; i++)
|
for (i = 0; i < Count; i++)
|
||||||
{
|
{
|
||||||
Offset = *TypeOffset & 0xFFF;
|
Offset = *TypeOffset & 0xFFF;
|
||||||
Type = *TypeOffset >> 12;
|
Type = *TypeOffset >> 12;
|
||||||
ShortPtr = (PUSHORT)(Address + Offset);
|
ShortPtr = (PUSHORT)(RVA(Address, Offset));
|
||||||
|
|
||||||
/* Don't relocate after the end of the loaded driver */
|
/* Don't relocate after the end of the loaded driver */
|
||||||
if ((PVOID)ShortPtr >= MaxAddress)
|
if ((PVOID)ShortPtr >= MaxAddress)
|
||||||
|
@ -1276,6 +1276,9 @@ LdrPEPerformRelocations (
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
#ifndef PATH_MAX
|
||||||
|
#define PATH_MAX 260
|
||||||
|
#endif
|
||||||
|
|
||||||
static NTSTATUS
|
static NTSTATUS
|
||||||
LdrPEGetOrLoadModule (
|
LdrPEGetOrLoadModule (
|
||||||
|
@ -1552,16 +1555,16 @@ LdrPEProcessImportDirectoryEntry(
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the import address list. */
|
/* Get the import address list. */
|
||||||
ImportAddressList = (PVOID*)(DriverBase + (ULONG_PTR)ImportModuleDirectory->FirstThunk);
|
ImportAddressList = (PVOID*)RVA(DriverBase, ImportModuleDirectory->FirstThunk);
|
||||||
|
|
||||||
/* Get the list of functions to import. */
|
/* Get the list of functions to import. */
|
||||||
if (ImportModuleDirectory->OriginalFirstThunk != 0)
|
if (ImportModuleDirectory->OriginalFirstThunk != 0)
|
||||||
{
|
{
|
||||||
FunctionNameList = (PULONG) (DriverBase + (ULONG_PTR)ImportModuleDirectory->OriginalFirstThunk);
|
FunctionNameList = (PULONG)RVA(DriverBase, ImportModuleDirectory->OriginalFirstThunk);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FunctionNameList = (PULONG)(DriverBase + (ULONG_PTR)ImportModuleDirectory->FirstThunk);
|
FunctionNameList = (PULONG)RVA(DriverBase, ImportModuleDirectory->FirstThunk);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Walk through function list and fixup addresses. */
|
/* Walk through function list and fixup addresses. */
|
||||||
|
|
|
@ -195,8 +195,8 @@ found:;
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
STDCALL
|
||||||
LdrFindResourceDirectory_U(
|
LdrFindResourceDirectory_U(
|
||||||
IN PVOID BaseAddress,
|
IN PVOID BaseAddress,
|
||||||
IN PLDR_RESOURCE_INFO ResourceInfo,
|
IN PLDR_RESOURCE_INFO ResourceInfo,
|
||||||
|
@ -211,8 +211,8 @@ LdrFindResourceDirectory_U(
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
STDCALL
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
STDCALL
|
||||||
LdrEnumResources(
|
LdrEnumResources(
|
||||||
IN PVOID BaseAddress,
|
IN PVOID BaseAddress,
|
||||||
IN PLDR_RESOURCE_INFO ResourceInfo,
|
IN PLDR_RESOURCE_INFO ResourceInfo,
|
||||||
|
|
|
@ -17,8 +17,6 @@
|
||||||
|
|
||||||
/* FUNCTIONS ****************************************************************/
|
/* FUNCTIONS ****************************************************************/
|
||||||
|
|
||||||
#define RVA(m, b) ((ULONG)b + m)
|
|
||||||
|
|
||||||
NTSTATUS STDCALL
|
NTSTATUS STDCALL
|
||||||
LdrGetProcedureAddress (IN PVOID BaseAddress,
|
LdrGetProcedureAddress (IN PVOID BaseAddress,
|
||||||
IN PANSI_STRING Name,
|
IN PANSI_STRING Name,
|
||||||
|
|
|
@ -145,7 +145,7 @@ MmUnmapIoSpace (IN PVOID BaseAddress,
|
||||||
PVOID Address = BaseAddress;
|
PVOID Address = BaseAddress;
|
||||||
|
|
||||||
Offset = (ULONG_PTR)Address % PAGE_SIZE;
|
Offset = (ULONG_PTR)Address % PAGE_SIZE;
|
||||||
Address -= Offset;
|
Address = RVA(Address, - Offset);
|
||||||
NumberOfBytes += Offset;
|
NumberOfBytes += Offset;
|
||||||
|
|
||||||
MmLockAddressSpace(MmGetKernelAddressSpace());
|
MmLockAddressSpace(MmGetKernelAddressSpace());
|
||||||
|
|
|
@ -28,8 +28,8 @@ MiCreatePebOrTeb(PEPROCESS Process,
|
||||||
PMADDRESS_SPACE ProcessAddressSpace = &Process->AddressSpace;
|
PMADDRESS_SPACE ProcessAddressSpace = &Process->AddressSpace;
|
||||||
PMEMORY_AREA MemoryArea;
|
PMEMORY_AREA MemoryArea;
|
||||||
PHYSICAL_ADDRESS BoundaryAddressMultiple;
|
PHYSICAL_ADDRESS BoundaryAddressMultiple;
|
||||||
BoundaryAddressMultiple.QuadPart = 0;
|
|
||||||
PVOID AllocatedBase = BaseAddress;
|
PVOID AllocatedBase = BaseAddress;
|
||||||
|
BoundaryAddressMultiple.QuadPart = 0;
|
||||||
|
|
||||||
/* Acquire the Lock */
|
/* Acquire the Lock */
|
||||||
MmLockAddressSpace(ProcessAddressSpace);
|
MmLockAddressSpace(ProcessAddressSpace);
|
||||||
|
@ -54,7 +54,7 @@ MiCreatePebOrTeb(PEPROCESS Process,
|
||||||
TRUE,
|
TRUE,
|
||||||
FALSE,
|
FALSE,
|
||||||
BoundaryAddressMultiple);
|
BoundaryAddressMultiple);
|
||||||
AllocatedBase = AllocatedBase - PAGE_SIZE;
|
AllocatedBase = RVA(AllocatedBase, -PAGE_SIZE);
|
||||||
} while (Status != STATUS_SUCCESS);
|
} while (Status != STATUS_SUCCESS);
|
||||||
|
|
||||||
/* Initialize the Region */
|
/* Initialize the Region */
|
||||||
|
@ -69,7 +69,7 @@ MiCreatePebOrTeb(PEPROCESS Process,
|
||||||
/* Unlock Address Space */
|
/* Unlock Address Space */
|
||||||
DPRINT("Returning\n");
|
DPRINT("Returning\n");
|
||||||
MmUnlockAddressSpace(ProcessAddressSpace);
|
MmUnlockAddressSpace(ProcessAddressSpace);
|
||||||
return AllocatedBase + PAGE_SIZE;
|
return RVA(AllocatedBase, PAGE_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
|
@ -345,9 +345,9 @@ MmCreateProcessAddressSpace(IN PEPROCESS Process,
|
||||||
PVOID BaseAddress;
|
PVOID BaseAddress;
|
||||||
PMEMORY_AREA MemoryArea;
|
PMEMORY_AREA MemoryArea;
|
||||||
PHYSICAL_ADDRESS BoundaryAddressMultiple;
|
PHYSICAL_ADDRESS BoundaryAddressMultiple;
|
||||||
BoundaryAddressMultiple.QuadPart = 0;
|
|
||||||
ULONG ViewSize = 0;
|
ULONG ViewSize = 0;
|
||||||
PVOID ImageBase = 0;
|
PVOID ImageBase = 0;
|
||||||
|
BoundaryAddressMultiple.QuadPart = 0;
|
||||||
|
|
||||||
/* Initialize the Addresss Space */
|
/* Initialize the Addresss Space */
|
||||||
MmInitializeAddressSpace(Process, ProcessAddressSpace);
|
MmInitializeAddressSpace(Process, ProcessAddressSpace);
|
||||||
|
|
|
@ -1952,7 +1952,7 @@ MmQuerySectionView(PMEMORY_AREA MemoryArea,
|
||||||
if (Section->AllocationAttributes & SEC_IMAGE)
|
if (Section->AllocationAttributes & SEC_IMAGE)
|
||||||
{
|
{
|
||||||
Segment = MemoryArea->Data.SectionData.Segment;
|
Segment = MemoryArea->Data.SectionData.Segment;
|
||||||
Info->AllocationBase = MemoryArea->StartingAddress - Segment->VirtualAddress;
|
Info->AllocationBase = (PBYTE)MemoryArea->StartingAddress - Segment->VirtualAddress;
|
||||||
Info->Type = MEM_IMAGE;
|
Info->Type = MEM_IMAGE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -60,8 +60,8 @@ static VOID
|
||||||
ObpDecrementHandleCount(PVOID ObjectBody)
|
ObpDecrementHandleCount(PVOID ObjectBody)
|
||||||
{
|
{
|
||||||
POBJECT_HEADER ObjectHeader = BODY_TO_HEADER(ObjectBody);
|
POBJECT_HEADER ObjectHeader = BODY_TO_HEADER(ObjectBody);
|
||||||
DPRINT("Header: %x\n", ObjectHeader);
|
|
||||||
LONG NewHandleCount = InterlockedDecrement(&ObjectHeader->HandleCount);
|
LONG NewHandleCount = InterlockedDecrement(&ObjectHeader->HandleCount);
|
||||||
|
DPRINT("Header: %x\n", ObjectHeader);
|
||||||
DPRINT("NewHandleCount: %x\n", NewHandleCount);
|
DPRINT("NewHandleCount: %x\n", NewHandleCount);
|
||||||
DPRINT("HEADER_TO_OBJECT_NAME: %x\n", HEADER_TO_OBJECT_NAME(ObjectHeader));
|
DPRINT("HEADER_TO_OBJECT_NAME: %x\n", HEADER_TO_OBJECT_NAME(ObjectHeader));
|
||||||
|
|
||||||
|
@ -1008,15 +1008,15 @@ ObInsertObject(IN PVOID Object,
|
||||||
if (FoundHeader && FoundHeader->Type == ObDirectoryType &&
|
if (FoundHeader && FoundHeader->Type == ObDirectoryType &&
|
||||||
RemainingPath.Buffer)
|
RemainingPath.Buffer)
|
||||||
{
|
{
|
||||||
ObpAddEntryDirectory(FoundObject, Header, NULL);
|
|
||||||
ObjectAttached = TRUE;
|
|
||||||
|
|
||||||
/* The name was changed so let's update it */
|
/* The name was changed so let's update it */
|
||||||
/* FIXME: TEMPORARY HACK This will go in ObFindObject in the next commit */
|
/* FIXME: TEMPORARY HACK This will go in ObFindObject in the next commit */
|
||||||
PVOID NewName;
|
PVOID NewName;
|
||||||
PWSTR BufferPos = RemainingPath.Buffer;
|
PWSTR BufferPos = RemainingPath.Buffer;
|
||||||
ULONG Delta = 0;
|
ULONG Delta = 0;
|
||||||
|
|
||||||
|
ObpAddEntryDirectory(FoundObject, Header, NULL);
|
||||||
|
ObjectAttached = TRUE;
|
||||||
|
|
||||||
ObjectNameInfo = HEADER_TO_OBJECT_NAME(Header);
|
ObjectNameInfo = HEADER_TO_OBJECT_NAME(Header);
|
||||||
|
|
||||||
if (BufferPos[0] == L'\\')
|
if (BufferPos[0] == L'\\')
|
||||||
|
|
|
@ -24,8 +24,8 @@ extern FAST_MUTEX PspActiveProcessMutex;
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
||||||
STDCALL
|
|
||||||
VOID
|
VOID
|
||||||
|
STDCALL
|
||||||
PspReapRoutine(PVOID Context)
|
PspReapRoutine(PVOID Context)
|
||||||
{
|
{
|
||||||
KIRQL OldIrql;
|
KIRQL OldIrql;
|
||||||
|
|
|
@ -173,8 +173,7 @@ PsInitProcessManagment(VOID)
|
||||||
ProcessObject,
|
ProcessObject,
|
||||||
sizeof(EPROCESS),
|
sizeof(EPROCESS),
|
||||||
FALSE);
|
FALSE);
|
||||||
PsIdleProcess->Pcb.DirectoryTableBase =
|
PsIdleProcess->Pcb.DirectoryTableBase.QuadPart = (ULONG_PTR)MmGetPageDirectory();
|
||||||
(LARGE_INTEGER)(LONGLONG)(ULONG)MmGetPageDirectory();
|
|
||||||
strcpy(PsIdleProcess->ImageFileName, "Idle");
|
strcpy(PsIdleProcess->ImageFileName, "Idle");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -234,6 +233,7 @@ PsInitProcessManagment(VOID)
|
||||||
InitializeListHead(&PsInitialSystemProcess->ThreadListHead);
|
InitializeListHead(&PsInitialSystemProcess->ThreadListHead);
|
||||||
|
|
||||||
#ifndef SCHED_REWRITE
|
#ifndef SCHED_REWRITE
|
||||||
|
{
|
||||||
PTOKEN BootToken;
|
PTOKEN BootToken;
|
||||||
|
|
||||||
/* No parent, this is the Initial System Process. Assign Boot Token */
|
/* No parent, this is the Initial System Process. Assign Boot Token */
|
||||||
|
@ -241,6 +241,7 @@ PsInitProcessManagment(VOID)
|
||||||
BootToken->TokenInUse = TRUE;
|
BootToken->TokenInUse = TRUE;
|
||||||
PsInitialSystemProcess->Token.Object = BootToken; /* FIXME */
|
PsInitialSystemProcess->Token.Object = BootToken; /* FIXME */
|
||||||
ObReferenceObject(BootToken);
|
ObReferenceObject(BootToken);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,8 @@
|
||||||
|
|
||||||
/* GLOBALS ******************************************************************/
|
/* GLOBALS ******************************************************************/
|
||||||
|
|
||||||
PACL EXPORTED SePublicDefaultDacl = NULL;
|
PACL SePublicDefaultDacl = NULL;
|
||||||
PACL EXPORTED SeSystemDefaultDacl = NULL;
|
PACL SeSystemDefaultDacl = NULL;
|
||||||
|
|
||||||
PACL SePublicDefaultUnrestrictedDacl = NULL;
|
PACL SePublicDefaultUnrestrictedDacl = NULL;
|
||||||
PACL SePublicOpenDacl = NULL;
|
PACL SePublicOpenDacl = NULL;
|
||||||
|
|
|
@ -39,7 +39,7 @@ ExpAllocateLocallyUniqueId(OUT LUID *LocallyUniqueId)
|
||||||
/* atomically increment the luid */
|
/* atomically increment the luid */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
PrevLuid = (volatile LARGE_INTEGER)LuidValue;
|
PrevLuid = LuidValue;
|
||||||
NewLuid = RtlLargeIntegerAdd(PrevLuid,
|
NewLuid = RtlLargeIntegerAdd(PrevLuid,
|
||||||
LuidIncrement);
|
LuidIncrement);
|
||||||
} while(ExfInterlockedCompareExchange64(&LuidValue.QuadPart,
|
} while(ExfInterlockedCompareExchange64(&LuidValue.QuadPart,
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
/* GLOBALS ******************************************************************/
|
/* GLOBALS ******************************************************************/
|
||||||
|
|
||||||
PSE_EXPORTS EXPORTED SeExports = NULL;
|
PSE_EXPORTS SeExports = NULL;
|
||||||
SE_EXPORTS SepExports;
|
SE_EXPORTS SepExports;
|
||||||
|
|
||||||
static ERESOURCE SepSubjectContextLock;
|
static ERESOURCE SepSubjectContextLock;
|
||||||
|
|
|
@ -1820,17 +1820,19 @@ SepCreateSystemProcessToken(VOID)
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
ULONG uSize;
|
ULONG uSize;
|
||||||
ULONG i;
|
ULONG i;
|
||||||
|
ULONG uLocalSystemLength;
|
||||||
|
ULONG uWorldLength;
|
||||||
|
ULONG uAuthUserLength;
|
||||||
|
ULONG uAdminsLength;
|
||||||
|
PTOKEN AccessToken;
|
||||||
|
PVOID SidArea;
|
||||||
|
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
ULONG uLocalSystemLength = RtlLengthSid(SeLocalSystemSid);
|
uLocalSystemLength = RtlLengthSid(SeLocalSystemSid);
|
||||||
ULONG uWorldLength = RtlLengthSid(SeWorldSid);
|
uWorldLength = RtlLengthSid(SeWorldSid);
|
||||||
ULONG uAuthUserLength = RtlLengthSid(SeAuthenticatedUserSid);
|
uAuthUserLength = RtlLengthSid(SeAuthenticatedUserSid);
|
||||||
ULONG uAdminsLength = RtlLengthSid(SeAliasAdminsSid);
|
uAdminsLength = RtlLengthSid(SeAliasAdminsSid);
|
||||||
|
|
||||||
PTOKEN AccessToken;
|
|
||||||
|
|
||||||
PVOID SidArea;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the token
|
* Initialize the token
|
||||||
|
|
|
@ -183,12 +183,12 @@ typedef struct _BATTERY_WAIT_STATUS {
|
||||||
CTL_CODE(FILE_DEVICE_BATTERY, 0x13, METHOD_BUFFERED, FILE_READ_ACCESS)
|
CTL_CODE(FILE_DEVICE_BATTERY, 0x13, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||||
|
|
||||||
|
|
||||||
typedef NTSTATUS DDKAPI
|
typedef NTSTATUS
|
||||||
(*BCLASS_DISABLE_STATUS_NOTIFY)(
|
(DDKAPI*BCLASS_DISABLE_STATUS_NOTIFY)(
|
||||||
IN PVOID Context);
|
IN PVOID Context);
|
||||||
|
|
||||||
typedef NTSTATUS DDKAPI
|
typedef NTSTATUS
|
||||||
(*BCLASS_QUERY_INFORMATION)(
|
(DDKAPI*BCLASS_QUERY_INFORMATION)(
|
||||||
IN PVOID Context,
|
IN PVOID Context,
|
||||||
IN ULONG BatteryTag,
|
IN ULONG BatteryTag,
|
||||||
IN BATTERY_QUERY_INFORMATION_LEVEL Level,
|
IN BATTERY_QUERY_INFORMATION_LEVEL Level,
|
||||||
|
@ -197,26 +197,26 @@ typedef NTSTATUS DDKAPI
|
||||||
IN ULONG BufferLength,
|
IN ULONG BufferLength,
|
||||||
OUT PULONG ReturnedLength);
|
OUT PULONG ReturnedLength);
|
||||||
|
|
||||||
typedef NTSTATUS DDKAPI
|
typedef NTSTATUS
|
||||||
(*BCLASS_QUERY_STATUS)(
|
(DDKAPI*BCLASS_QUERY_STATUS)(
|
||||||
IN PVOID Context,
|
IN PVOID Context,
|
||||||
IN ULONG BatteryTag,
|
IN ULONG BatteryTag,
|
||||||
OUT PBATTERY_STATUS BatteryStatus);
|
OUT PBATTERY_STATUS BatteryStatus);
|
||||||
|
|
||||||
typedef NTSTATUS DDKAPI
|
typedef NTSTATUS
|
||||||
(*BCLASS_QUERY_TAG)(
|
(DDKAPI*BCLASS_QUERY_TAG)(
|
||||||
IN PVOID Context,
|
IN PVOID Context,
|
||||||
OUT PULONG BatteryTag);
|
OUT PULONG BatteryTag);
|
||||||
|
|
||||||
typedef NTSTATUS DDKAPI
|
typedef NTSTATUS
|
||||||
(*BCLASS_SET_INFORMATION)(
|
(DDKAPI*BCLASS_SET_INFORMATION)(
|
||||||
IN PVOID Context,
|
IN PVOID Context,
|
||||||
IN ULONG BatteryTag,
|
IN ULONG BatteryTag,
|
||||||
IN BATTERY_SET_INFORMATION_LEVEL Level,
|
IN BATTERY_SET_INFORMATION_LEVEL Level,
|
||||||
IN PVOID Buffer OPTIONAL);
|
IN PVOID Buffer OPTIONAL);
|
||||||
|
|
||||||
typedef NTSTATUS DDKAPI
|
typedef NTSTATUS
|
||||||
(*BCLASS_SET_STATUS_NOTIFY)(
|
(DDKAPI*BCLASS_SET_STATUS_NOTIFY)(
|
||||||
IN PVOID Context,
|
IN PVOID Context,
|
||||||
IN ULONG BatteryTag,
|
IN ULONG BatteryTag,
|
||||||
IN PBATTERY_NOTIFY BatteryNotify);
|
IN PBATTERY_NOTIFY BatteryNotify);
|
||||||
|
|
|
@ -50,11 +50,11 @@ typedef CONST char *PCSZ;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef DECL_IMPORT
|
#ifndef DECL_IMPORT
|
||||||
#define DECL_IMPORT __attribute__((dllimport))
|
#define DECL_IMPORT __declspec(dllimport)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef DECL_EXPORT
|
#ifndef DECL_EXPORT
|
||||||
#define DECL_EXPORT __attribute__((dllexport))
|
#define DECL_EXPORT __declspec(dllexport)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Windows NT status codes */
|
/* Windows NT status codes */
|
||||||
|
|
|
@ -585,7 +585,7 @@ typedef struct _KAPC_STATE {
|
||||||
BOOLEAN KernelApcInProgress;
|
BOOLEAN KernelApcInProgress;
|
||||||
BOOLEAN KernelApcPending;
|
BOOLEAN KernelApcPending;
|
||||||
BOOLEAN UserApcPending;
|
BOOLEAN UserApcPending;
|
||||||
} KAPC_STATE, *PKAPC_STATE, *__restrict PRKAPC_STATE;
|
} KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE;
|
||||||
|
|
||||||
#if (VER_PRODUCTBUILD >= 2600)
|
#if (VER_PRODUCTBUILD >= 2600)
|
||||||
|
|
||||||
|
@ -2291,15 +2291,15 @@ FsRtlCheckLockForWriteAccess (
|
||||||
);
|
);
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
VOID NTAPI
|
VOID
|
||||||
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
|
(NTAPI*POPLOCK_WAIT_COMPLETE_ROUTINE) (
|
||||||
IN PVOID Context,
|
IN PVOID Context,
|
||||||
IN PIRP Irp
|
IN PIRP Irp
|
||||||
);
|
);
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
VOID NTAPI
|
VOID
|
||||||
(*POPLOCK_FS_PREPOST_IRP) (
|
(NTAPI*POPLOCK_FS_PREPOST_IRP) (
|
||||||
IN PVOID Context,
|
IN PVOID Context,
|
||||||
IN PIRP Irp
|
IN PIRP Irp
|
||||||
);
|
);
|
||||||
|
|
|
@ -43,8 +43,8 @@ typedef struct _PROCESSOR_IDLE_TIMES {
|
||||||
ULONG IdleHandlerReserved[4];
|
ULONG IdleHandlerReserved[4];
|
||||||
} PROCESSOR_IDLE_TIMES, *PPROCESSOR_IDLE_TIMES;
|
} PROCESSOR_IDLE_TIMES, *PPROCESSOR_IDLE_TIMES;
|
||||||
|
|
||||||
typedef BOOLEAN DDKFASTAPI
|
typedef BOOLEAN
|
||||||
(*PPROCESSOR_IDLE_HANDLER)(
|
(DDKFASTAPI*PPROCESSOR_IDLE_HANDLER)(
|
||||||
IN OUT PPROCESSOR_IDLE_TIMES IdleTimes);
|
IN OUT PPROCESSOR_IDLE_TIMES IdleTimes);
|
||||||
|
|
||||||
typedef struct _PROCESSOR_IDLE_HANDLER_INFO {
|
typedef struct _PROCESSOR_IDLE_HANDLER_INFO {
|
||||||
|
@ -52,12 +52,12 @@ typedef struct _PROCESSOR_IDLE_HANDLER_INFO {
|
||||||
PPROCESSOR_IDLE_HANDLER Handler;
|
PPROCESSOR_IDLE_HANDLER Handler;
|
||||||
} PROCESSOR_IDLE_HANDLER_INFO, *PPROCESSOR_IDLE_HANDLER_INFO;
|
} PROCESSOR_IDLE_HANDLER_INFO, *PPROCESSOR_IDLE_HANDLER_INFO;
|
||||||
|
|
||||||
typedef VOID DDKFASTAPI
|
typedef VOID
|
||||||
(*PSET_PROCESSOR_THROTTLE)(
|
(DDKFASTAPI*PSET_PROCESSOR_THROTTLE)(
|
||||||
IN UCHAR Throttle);
|
IN UCHAR Throttle);
|
||||||
|
|
||||||
typedef NTSTATUS DDKFASTAPI
|
typedef NTSTATUS
|
||||||
(*PSET_PROCESSOR_THROTTLE2)(
|
(DDKFASTAPI*PSET_PROCESSOR_THROTTLE2)(
|
||||||
IN UCHAR Throttle);
|
IN UCHAR Throttle);
|
||||||
|
|
||||||
#define MAX_IDLE_HANDLERS 3
|
#define MAX_IDLE_HANDLERS 3
|
||||||
|
@ -81,12 +81,12 @@ typedef enum _POWER_STATE_HANDLER_TYPE {
|
||||||
PowerStateMaximum
|
PowerStateMaximum
|
||||||
} POWER_STATE_HANDLER_TYPE, *PPOWER_STATE_HANDLER_TYPE;
|
} POWER_STATE_HANDLER_TYPE, *PPOWER_STATE_HANDLER_TYPE;
|
||||||
|
|
||||||
typedef NTSTATUS DDKAPI
|
typedef NTSTATUS
|
||||||
(*PENTER_STATE_SYSTEM_HANDLER)(
|
(DDKAPI*PENTER_STATE_SYSTEM_HANDLER)(
|
||||||
IN PVOID SystemContext);
|
IN PVOID SystemContext);
|
||||||
|
|
||||||
typedef NTSTATUS DDKAPI
|
typedef NTSTATUS
|
||||||
(*PENTER_STATE_HANDLER)(
|
(DDKAPI*PENTER_STATE_HANDLER)(
|
||||||
IN PVOID Context,
|
IN PVOID Context,
|
||||||
IN PENTER_STATE_SYSTEM_HANDLER SystemHandler OPTIONAL,
|
IN PENTER_STATE_SYSTEM_HANDLER SystemHandler OPTIONAL,
|
||||||
IN PVOID SystemContext,
|
IN PVOID SystemContext,
|
||||||
|
@ -101,8 +101,8 @@ typedef struct _POWER_STATE_HANDLER {
|
||||||
PVOID Context;
|
PVOID Context;
|
||||||
} POWER_STATE_HANDLER, *PPOWER_STATE_HANDLER;
|
} POWER_STATE_HANDLER, *PPOWER_STATE_HANDLER;
|
||||||
|
|
||||||
typedef NTSTATUS STDCALL
|
typedef NTSTATUS
|
||||||
(*PENTER_STATE_NOTIFY_HANDLER)(
|
(STDCALL*PENTER_STATE_NOTIFY_HANDLER)(
|
||||||
IN POWER_STATE_HANDLER_TYPE State,
|
IN POWER_STATE_HANDLER_TYPE State,
|
||||||
IN PVOID Context,
|
IN PVOID Context,
|
||||||
IN BOOLEAN Entering);
|
IN BOOLEAN Entering);
|
||||||
|
|
|
@ -34,9 +34,9 @@ extern "C" {
|
||||||
/*
|
/*
|
||||||
** Definitions specific to this Device Driver Kit
|
** Definitions specific to this Device Driver Kit
|
||||||
*/
|
*/
|
||||||
#define DDKAPI __attribute__((stdcall))
|
#define DDKAPI __stdcall
|
||||||
#define DDKFASTAPI __attribute__((fastcall))
|
#define DDKFASTAPI __fastcall
|
||||||
#define DDKCDECLAPI __attribute__((cdecl))
|
#define DDKCDECLAPI __cdecl
|
||||||
|
|
||||||
#if defined(_NTOSKRNL_)
|
#if defined(_NTOSKRNL_)
|
||||||
#ifndef NTOSAPI
|
#ifndef NTOSAPI
|
||||||
|
@ -128,11 +128,15 @@ static __inline struct _KPCR * KeGetCurrentKPCR(
|
||||||
VOID)
|
VOID)
|
||||||
{
|
{
|
||||||
ULONG Value;
|
ULONG Value;
|
||||||
|
#if defined(__GNUC__)
|
||||||
__asm__ __volatile__ ("movl %%fs:0x1C, %0\n\t"
|
__asm__ __volatile__ ("movl %%fs:0x1C, %0\n\t"
|
||||||
: "=r" (Value)
|
: "=r" (Value)
|
||||||
: /* no inputs */
|
: /* no inputs */
|
||||||
);
|
);
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
__asm mov eax, fs:[1Ch]
|
||||||
|
__asm mov [Value], eax
|
||||||
|
#endif
|
||||||
return (struct _KPCR *) Value;
|
return (struct _KPCR *) Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,11 +144,15 @@ static __inline struct _KPRCB * KeGetCurrentPrcb(
|
||||||
VOID)
|
VOID)
|
||||||
{
|
{
|
||||||
ULONG Value;
|
ULONG Value;
|
||||||
|
#if defined(__GNUC__)
|
||||||
__asm__ __volatile__ ("movl %%fs:0x20, %0\n\t"
|
__asm__ __volatile__ ("movl %%fs:0x20, %0\n\t"
|
||||||
: "=r" (Value)
|
: "=r" (Value)
|
||||||
: /* no inputs */
|
: /* no inputs */
|
||||||
);
|
);
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
__asm mov eax, fs:[20h]
|
||||||
|
__asm mov [Value], eax
|
||||||
|
#endif
|
||||||
return (struct _KPRCB *) Value;
|
return (struct _KPRCB *) Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4331,8 +4339,8 @@ typedef struct _DISK_SIGNATURE {
|
||||||
} DUMMYUNIONNAME;
|
} DUMMYUNIONNAME;
|
||||||
} DISK_SIGNATURE, *PDISK_SIGNATURE;
|
} DISK_SIGNATURE, *PDISK_SIGNATURE;
|
||||||
|
|
||||||
typedef VOID DDKFASTAPI
|
typedef VOID
|
||||||
(*PTIME_UPDATE_NOTIFY_ROUTINE)(
|
(DDKFASTAPI*PTIME_UPDATE_NOTIFY_ROUTINE)(
|
||||||
IN HANDLE ThreadId,
|
IN HANDLE ThreadId,
|
||||||
IN KPROCESSOR_MODE Mode);
|
IN KPROCESSOR_MODE Mode);
|
||||||
|
|
||||||
|
@ -8088,7 +8096,11 @@ KeMemoryBarrier(
|
||||||
VOID)
|
VOID)
|
||||||
{
|
{
|
||||||
volatile LONG Barrier;
|
volatile LONG Barrier;
|
||||||
|
#if defined(__GNUC__)
|
||||||
__asm__ __volatile__ ("xchg %%eax, %0" : : "m" (Barrier) : "%eax");
|
__asm__ __volatile__ ("xchg %%eax, %0" : : "m" (Barrier) : "%eax");
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
__asm xchg [Barrier], eax
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
NTOSAPI
|
NTOSAPI
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
#if __GNUC__ >=3
|
#if __GNUC__ >=3
|
||||||
#pragma GCC system_header
|
#pragma GCC system_header
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* TODO: some compilers support this */
|
||||||
|
#define RESTRICTED_POINTER
|
||||||
|
|
||||||
#define NTAPI __stdcall
|
#define NTAPI __stdcall
|
||||||
#define OBJ_INHERIT 0x00000002
|
#define OBJ_INHERIT 0x00000002
|
||||||
|
|
|
@ -118,6 +118,9 @@ extern "C" {
|
||||||
#elif defined(__WATCOMC__)
|
#elif defined(__WATCOMC__)
|
||||||
#define DECLSPEC_NORETURN
|
#define DECLSPEC_NORETURN
|
||||||
#define DECLARE_STDCALL_P( type ) type __stdcall
|
#define DECLARE_STDCALL_P( type ) type __stdcall
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
#define DECLSPEC_NORETURN __declspec(noreturn)
|
||||||
|
#define DECLARE_STDCALL_P( type ) type __stdcall
|
||||||
#endif /* __GNUC__/__WATCOMC__ */
|
#endif /* __GNUC__/__WATCOMC__ */
|
||||||
#define MAKEWORD(a,b) ((WORD)(((BYTE)(a))|(((WORD)((BYTE)(b)))<<8)))
|
#define MAKEWORD(a,b) ((WORD)(((BYTE)(a))|(((WORD)((BYTE)(b)))<<8)))
|
||||||
#define MAKELONG(a,b) ((LONG)(((WORD)(a))|(((DWORD)((WORD)(b)))<<16)))
|
#define MAKELONG(a,b) ((LONG)(((WORD)(a))|(((DWORD)((WORD)(b)))<<16)))
|
||||||
|
@ -160,7 +163,7 @@ extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
#endif /* __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) */
|
#endif /* __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) */
|
||||||
#endif /* NONAMELESSUNION */
|
#endif /* NONAMELESSUNION */
|
||||||
#elif defined(__WATCOMC__)
|
#elif defined(__WATCOMC__) || defined(_MSC_VER)
|
||||||
#define _ANONYMOUS_UNION
|
#define _ANONYMOUS_UNION
|
||||||
#define _ANONYMOUS_STRUCT
|
#define _ANONYMOUS_STRUCT
|
||||||
#endif /* __GNUC__/__WATCOMC__ */
|
#endif /* __GNUC__/__WATCOMC__ */
|
||||||
|
|
|
@ -1358,7 +1358,7 @@ typedef struct _GUID {
|
||||||
unsigned short Data3;
|
unsigned short Data3;
|
||||||
unsigned char Data4[8];
|
unsigned char Data4[8];
|
||||||
} GUID, *REFGUID, *LPGUID;
|
} GUID, *REFGUID, *LPGUID;
|
||||||
#define SYSTEM_LUID { QuadPart:999 }
|
#define SYSTEM_LUID { 0x3E7, 0x0 }
|
||||||
#endif /* GUID_DEFINED */
|
#endif /* GUID_DEFINED */
|
||||||
|
|
||||||
/* ACE Access Types, also in ntifs.h */
|
/* ACE Access Types, also in ntifs.h */
|
||||||
|
@ -2039,7 +2039,10 @@ typedef union _ULARGE_INTEGER {
|
||||||
#endif /* NONAMELESSUNION */
|
#endif /* NONAMELESSUNION */
|
||||||
ULONGLONG QuadPart;
|
ULONGLONG QuadPart;
|
||||||
} ULARGE_INTEGER, *PULARGE_INTEGER;
|
} ULARGE_INTEGER, *PULARGE_INTEGER;
|
||||||
typedef LARGE_INTEGER LUID,*PLUID;
|
typedef struct _LUID {
|
||||||
|
DWORD LowPart;
|
||||||
|
LONG HighPart;
|
||||||
|
} LUID, *PLUID;
|
||||||
#pragma pack(push,4)
|
#pragma pack(push,4)
|
||||||
typedef struct _LUID_AND_ATTRIBUTES {
|
typedef struct _LUID_AND_ATTRIBUTES {
|
||||||
LUID Luid;
|
LUID Luid;
|
||||||
|
@ -3413,17 +3416,6 @@ static __inline__ PVOID GetCurrentFiber(void)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __inline__ PVOID GetFiberData(void)
|
|
||||||
{
|
|
||||||
void* ret;
|
|
||||||
__asm__ __volatile__ (
|
|
||||||
"movl %%fs:0x10,%0\n"
|
|
||||||
"movl (%0),%0"
|
|
||||||
: "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */
|
|
||||||
);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static __inline__ struct _TEB * NtCurrentTeb(void)
|
static __inline__ struct _TEB * NtCurrentTeb(void)
|
||||||
{
|
{
|
||||||
struct _TEB *ret;
|
struct _TEB *ret;
|
||||||
|
@ -3437,7 +3429,7 @@ static __inline__ struct _TEB * NtCurrentTeb(void)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#elif defined(__WATCOMC__)
|
||||||
|
|
||||||
extern PVOID GetCurrentFiber(void);
|
extern PVOID GetCurrentFiber(void);
|
||||||
#pragma aux GetCurrentFiber = \
|
#pragma aux GetCurrentFiber = \
|
||||||
|
@ -3445,14 +3437,36 @@ extern PVOID GetCurrentFiber(void);
|
||||||
value [eax] \
|
value [eax] \
|
||||||
modify [eax];
|
modify [eax];
|
||||||
|
|
||||||
extern PVOID GetFiberData(void);
|
extern struct _TEB * NtCurrentTeb(void);
|
||||||
#pragma aux GetFiberData = \
|
#pragma aux NtCurrentTeb = \
|
||||||
"mov eax, dword ptr fs:0x10" \
|
"mov eax, dword ptr fs:0x18" \
|
||||||
"mov eax, [eax]" \
|
|
||||||
value [eax] \
|
value [eax] \
|
||||||
modify [eax];
|
modify [eax];
|
||||||
|
|
||||||
#endif /* __GNUC__ */
|
#elif defined(_MSC_VER)
|
||||||
|
|
||||||
|
static __inline PVOID GetCurrentFiber(void)
|
||||||
|
{
|
||||||
|
PVOID p;
|
||||||
|
__asm mov eax, fs:[10h]
|
||||||
|
__asm mov [p], eax
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline struct _TEB * NtCurrentTeb(void)
|
||||||
|
{
|
||||||
|
struct _TEB *p;
|
||||||
|
__asm mov eax, fs:[18h]
|
||||||
|
__asm mov [p], eax
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* __GNUC__/__WATCOMC__/_MSC_VER */
|
||||||
|
|
||||||
|
static __inline PVOID GetFiberData(void)
|
||||||
|
{
|
||||||
|
return *((PVOID *)GetCurrentFiber());
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* RC_INVOKED */
|
#endif /* RC_INVOKED */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue