NKGLOBAL (Compact 2013)
10/16/2014
This structure defines functions and variables that the kernel exports. The OEM adaptation layer (OAL) can only access kernel functions using this global structure.
Syntax
typedef struct _NKGLOBAL {
DWORD dwVersion;
PFN_WriteDebugString pfnWriteDebugString;
void (*pfnNKvDbgPrintfW)
(LPCWSTR lpszFmt, va_list lpParms);
int (*pfnNKwvsprintfW)
(LPWSTR lpOut, LPCWSTR lpFmt, va_list lpParms,
int maxchars);
void (*pfnSetLastError) (DWORD dwErr);
DWORD (*pfnGetLastError) (void);
void (WINAPI *pfnInitializeCS) (LPCRITICAL_SECTION lpcs);
void (WINAPI *pfnDeleteCS) (LPCRITICAL_SECTION lpcs);
void (WINAPI *pfnEnterCS) (LPCRITICAL_SECTION lpcs);
void (WINAPI *pfnLeaveCS) (LPCRITICAL_SECTION lpcs);
void (*pfnINT_OFF) (void);
void (*pfnINT_ON) (void);
BOOL (*pfnINT_ENABLE) (BOOL fEnable);
BOOL (*pfnHookInterrupt)
(int hwInterruptNumber, FARPROC pfnHandler);
BOOL (*pfnUnhookInterrupt)
(int hwInterruptNumber, FARPROC pfnHandler);
DWORD (*pfnNKCallIntChain) (BYTE irq);
BOOL (*pfnNKIsSysIntrValid) (DWORD idInt);
BOOL (*pfnNKSetInterruptEvent) (DWORD idInt);
void (*pfnSleep) (DWORD cmsec);
BOOL (*pfnVMSetAttrib)
(LPVOID lpvAddress, DWORD cbSize, DWORD dwNewFlags,
DWORD dwMask, LPDWORD lpdwOldFlags);
LPVOID (*pfnCreateStaticMapping)
(DWORD dwPhysBase, DWORD dwSize);
LONG (*pfnRegCreateKeyExW)
(HKEY hKey, LPCWSTR lpSubKey, DWORD Reserved,
LPWSTR lpClass, DWORD dwOptions, REGSAM samDesired,
LPSECURITY_ATTRIBUTES lpsa, PHKEY phkResult,
LPDWORD lpdwDisp);
LONG (*pfnRegOpenKeyExW)
(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions,
REGSAM samDesired, PHKEY phkResult);
LONG (*pfnRegCloseKey) (HKEY hKey);
LONG (*pfnRegQueryValueExW)
(HKEY hKey, LPCWSTR lpValueName, LPDWORD lpReserved,
LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData);
LONG (*pfnRegSetValueExW)
(HKEY hKey, LPCWSTR lpValueName, DWORD dwReserved,
DWORD dwType, LPBYTE lpData, DWORD cbData);
LONG (*pfnRegFlushKey) (HKEY hKey);
void (*pfnNKForceCleanBoot) (void);
BOOL (*pfnNKReboot) (BOOL fClean);
LPVOID (*pfnPhysToVirt) (DWORD dwShiftedPhysAddr, BOOL fCached);
LPVOID (*pfnVirtToPhys) (DWORD dwVirtAddr);
PFN_Ioctl pfnKITLIoctl;
DWORD (*pfnNKwcslen) (const wchar_t * wcs);
int (*pfnNKwcscmp) (const wchar_t * pwc1, const wchar_t * pwc2);
int (*pfnNKwcsicmp) (LPCWSTR str1, LPCWSTR str2);
int (*pfnNKwcsnicmp) (LPCWSTR str1, LPCWSTR str2, int cchLen);
void (*pfnNKwcscpy) (LPWSTR p1, LPCWSTR p2);
DWORD (*pfnNKwcsncpy) (LPWSTR pDst, LPCWSTR pSrc, DWORD cchLen);
int (*pfnNKstrcmpiAandW) (LPCSTR lpa, LPCWSTR lpu);
void (*pfnNKUnicodeToAscii)
(LPSTR chptr, LPCWSTR wchptr, int maxlen);
void (*pfnNKAsciiToUnicode)
(LPWSTR wchptr, LPCSTR chptr, int maxlen);
BOOL (*pfnSystemTimeToFileTime)
(const SYSTEMTIME *pst, LPFILETIME pft);
BOOL (*pfnFileTimeToSystemTime)
(const FILETIME *pft, LPSYSTEMTIME pst);
LONG (*pfnCompareFileTime) (const FILETIME *, const FILETIME *);
void (*pfnProfilerHit) (UINT addr);
DWORD (*pfnGetEPC) (void);
void (*pfn__report_gsfailure) (void);
DWORD dwStartupAddr;
volatile DWORD dwNextReschedTime;
volatile DWORD dwCurMSec;
volatile LARGE_INTEGER liIdle;
DWORD dwIdleConv;
DWORD dwMaxThreadPerProc;
DWORD dwProcessorType;
WORD wProcessorLevel;
WORD wProcessorRevision;
DWORD dwInstructionSet;
DBGPARAM *pKITLDbgZone;
void (*pfnNKSendIPI)
(DWORD dwType, DWORD dwTarget, DWORD dwCommand,
DWORD dwDate);
void (*pfnAcquireOalSpinLock) (void);
void (*pfnReleaseOalSpinLock) (void);
void (*pfnCeLogData)
(BOOL, DWORD, VOID*, DWORD, DWORD, DWORD, DWORD,
BOOL);
DWORD unused[32];
#ifdef x86
BOOL (*pfnX86wrmsr)
(DWORD dwAddr, DWORD dwValHigh, DWORD dwValLow);
BOOL (*pfnX86rdmsr)
(DWORD dwAddr, DWORD *lpdwValHigh, DWORD *lpdwValLow);
int (*pfnCallRing0Function) (FARPROC pfn, DWORD arg0, DWORD arg1, DWORD arg2);
DWORD dwKnownUncachedAddress;
#endif
#ifdef SH4
BYTE *IntrPrio;
DWORD *InterruptTable;
#endif
#ifdef ARM
const DWORD *pdwOrigVectors;
LPDWORD pdwCurrVectors;
#endif
} NKGLOBAL, *PNKGLOBAL;
Members
- dwVersion
Version of Windows Embedded Compact.
- pfnWriteDebugString
Pointer to the function NKOutputDebugString, which writes a string to the debug monitor port.
- pfnNKvDbgPrintfW
Pointer to the function NKvDbgPrintfW, which formats a string using the function NKwvsprintfW and prints it using NKOutputDebugString.
- pfnNKwvsprintfW
Pointer to the function NKwvsprintfW, which writes formatted data to a Unicode string.
- pfnSetLastError
Pointer to the function NKSetLastError, which sets the last error from the current thread.
- pfnGetLastError
Pointer to the function NKGetLastError, which returns the last error from the current thread.
- pfnInitializeCS
Pointer to the function InitializeCriticalSection, which initializes a critical section object.
- pfnDeleteCS
Pointer to the function DeleteCriticalSection, which releases all resources used by a critical section object that is not owned.
- pfnEnterCS
Pointer to the function EnterCriticalSection, which waits for ownership of the specified critical section object.
- pfnLeaveCS
Pointer to the function LeaveCriticalSection, which releases ownership of the specified critical section object.
- pfnINT_OFF
Pointer to the function INTERRUPTS_OFF, which disables all interrupts.
- pfnINT_ON
Pointer to the function INTERRUPTS_ON, which enables all interrupts.
- pfnINT_ENABLE
Pointer to the function INTERRUPTS_ENABLE, which enables or disables all interrupts and returns the current state.
- pfnHookInterrupt
Pointer to the function HookInterrupt, which registers an interrupt service routine (ISR) with the kernel, specifying a particular hardware interrupt indicated by its interrupt request (IRQ) line value.
- pfnUnhookInterrupt
Pointer to the function UnhookInterrupt, which deregisters an ISR with a specific hardware interrupt.
- pfnNKCallIntChain
Pointer to the function NKCallIntChain, which determines which chained, or shared, interrupt device triggered an interrupt request (IRQ) event.
- pfnNKIsSysIntrValid
Pointer to the function NKIsSysIntrValid, which determines whether an interrupt identifier or SYSINTR value is valid.
- pfnNKSetInterruptEvent
Pointer to the function NKSetInterruptEvent, which causes an artificial interrupt event.
- pfnSleep
Pointer to the function NKSleep, which suspends the execution of the current thread for a specified interval.
- pfnVMSetAttrib
Pointer to the function VirtualSetAttrib, which enables OEMs to change the per-page attributes for a range of virtual memory.
- pfnCreateStaticMapping
Pointer to the function NKCreateStaticMapping, which creates a static virtual memory address that maps to a physical address.
- pfnRegCreateKeyExW
Pointer to the function NKRegCreateKeyExW, which creates a specified registry key.
- pfnRegOpenKeyExW
Pointer to the function NKRegOpenKeyExW, which opens the specified registry key.
- pfnRegCloseKey
Pointer to the function NKRegCloseKey, which releases the handle of the specified registry key.
- pfnRegQueryValueExW
Pointer to the function NKRegQueryValueExW, which retrieves the type and data for a specified value name associated with an open registry key.
- pfnRegSetValueExW
Pointer to the function NKRegSetValueExW, which stores data in the value field of an open registry key.
- pfnRegFlushKey
Pointer to the function NKRegFlushKey, which writes all the attributes of the specified open registry key into the registry.
- pfnNKForceCleanBoot
Pointer to the function NKForceCleanBoot, which forces the OS to boot from a clean object store file system.
- pfnNKReboot
Pointer to the function NKReboot, which reboots the OS.
- pfnPhysToVirt
Pointer to the function NKPhysToVirt, which translates physical addresses to virtual addresses.
- pfnVirtToPhys
Pointer to the function NKVirtToPhys, which translates virtual addresses to physical addresses.
- pfnKITLIoctl
Pointer to a function that provides the only entry point to the kernel independent transport layer (KITL). This function is not currently supported.
- pfnNKwcslen
Pointer to the function NKwcslen, which returns the length of a Unicode string.
- pfnNKwcscmp
Pointer to the function NKwcscmp, which compares two Unicode strings.
- pfnNKwcsicmp
Pointer to the function NKwcsicmp, which compares two Unicode strings while ignoring case.
- pfnNKwcsnicmp
Pointer to the function NKwcsnicmp, which compares up to a specified number of characters of two Unicode strings while ignoring case.
- pfnNKwcscpy
Pointer to the function NKwcscpy, which copies one Unicode string into another.
- pfnNKwcsncpy
Pointer to the function NKwcsncpy, which copies a specified number of characters from one Unicode string to another.
- pfnNKstrcmpiAandW
Pointer to the function NKstrcmpiAandW, which compares an ASCII string to a Unicode string.
- pfnNKUnicodeToAscii
Pointer to the function NKUnicodeToAscii, which converts a Unicode string to an ASCII string.
- pfnNKAsciiToUnicode
Pointer to the function NKAsciiToUnicode, which converts an ASCII string to a Unicode string.
- pfnSystemTimeToFileTime
Pointer to the function NKSystemTimeToFileTime, which converts system time to file time format.
- pfnFileTimeToSystemTime
Pointer to the function NKFileTimeToSystemTime, which converts file time to system time format.
- pfnCompareFileTime
Pointer to a function that compares two file times and returns a Boolean value.
- pfnProfilerHit
Pointer to the function ProfilerHit, which records a profiling sample.
- pfnGetEPC
Pointer to the function GetEPC, which returns the exception program counter (EPC).
- pfn__report_gsfailure
Pointer to the function __report_gsfailure, which reports a security error and reboots or halts the system.
- dwStartupAddr
Stores a reference to dwStartupAddr, which is the startup address that the soft reset handler uses*.*
- dwNextReschedTime
Stores a reference to dwReschedTime.
- dwCurMSec
Stores a reference to CurMSec, which indicates the number of milliseconds since the device was started.
- liIdle
Stores references to curridlehigh and curridlelow, which are the high and low DWORDs of the 64-bit idle time. liIdle.HighPart corresponds to curridlehigh, and liIdle.LowPart corresponds to curridlelow. The OAL initializes this variable.
- dwIdleConv
Stores a reference to idleconv, which is a translation constant that specifies the number of units per millisecond. The OAL initializes this variable.
- dwMaxThreadPerProc
Specifies the maximum number of threads per process. By default, this value is set to DEFAULT_MAX_THREADS_PER_PROC.
- dwProcessorType
Stores a reference to CEProcessorType in the OAL. This variable is initialized during the boot phase.
- wProcessorLevel
Stores a reference to CEProcessorLevel. This variable is initialized during the boot phase.
- wProcessorRevision
Stores a reference to CEProcessorRevision. This variable is initialized during the boot phase.
- dwInstructionSet
Stores a reference to CEInstructionSet. This variable is initialized during the boot phase.
- pKITLDbgZone
Specifies the KITL debug zone. This is not implemented by default.
- pfnNKSendIPI
Pointer to the function NKSendInterProcessorInterrupt. For maximum forward compatibility, we recommend that the OEM call NKSendInterProcessorInterrupt directly, instead of using this function pointer.
- pfnAcquireOalSpinLock
Pointer to the function NKAcquireOalSpinLock.
- pfnReleaseOalSpinLock
Pointer to the function NKReleaseOalSpinLock.
- pfnCeLogData
Pointer to the function NKCeLogData, which logs an event.
- unused[32]
Reserved for future use.
- pfnX86wrmsr
Pointer to the function NKwrmsr, which is a C wrapper function for the x86 WRMSR instruction. This function is specific to x86 only.
- pfnX86rdmsr
Pointer to the function NKrdmsr, which is a C wrapper function for the x86 RDMSR instruction. This function is specific to x86 only.
- pfnCallRing0Function
Calls an OEM adaptation layer function that must be run in ring zero.
- dwKnownUncachedAddress
The virtual address of an uncached page. This variable is specific to x86 only. The OAL uses it to perform cache flushing, because the OEMAddressTable structure does not contain static uncached mapping.
- IntrPrio
Pointer to the function IntrPrio. This function is not supported in Windows Embedded Compact 2013 because SH4 platforms are not supported.
- InterruptTable
Not implemented by default. This variable is not supported in Windows Embedded Compact 2013 because SH4 platforms are not supported.
- pdwOrigVectors
Pointer to the interrupt vector table, which is created when an ARM processor starts.
- pdwCurrVectors
Pointer to the function NKSetDataAbortHandler, which allows an OEM to replace the default abort handler on an ARM platform.
Remarks
The NKGLOBAL structure provides the ability to control the functions that the OAL can access inside the kernel. This structure is defined in Public\Common\Oak\Inc\Nkglobal.h.
The structure is initialized in Nkglobal.c and linked directly to the kernel.
Requirements
Header |
nkglobal.h |
Library |
Nkmain.lib |