Ignore:
Timestamp:
Nov 1, 2016, 7:26:35 PM (9 years ago)
Author:
bird
Message:

lib/nt: Got fts-nt halfways working, quite a few NT interface changes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/lib/nt/ntstuff.h

    r2913 r2985  
    4040#include <ntstatus.h>
    4141#undef timeval
     42
     43#include <k/kTypes.h>
    4244
    4345
     
    467469#endif
    468470
     471#ifndef DUPLICATE_CLOSE_SOURCE /* For the misnomer NtDuplicateObject. */
     472# define DUPLICATE_CLOSE_SOURCE             0x00000001U
     473# define DUPLICATE_SAME_ACCESS              0x00000002U
     474#endif
     475#ifndef DUPLICATE_SAME_ATTRIBUTES
     476# define DUPLICATE_SAME_ATTRIBUTES          0x00000004U
     477#endif
     478
    469479
    470480/** @name NT status codes and associated macros.
     
    480490/** @}  */
    481491
     492/** The pseudohandle for the current process. */
     493#define MY_NT_CURRENT_PROCESS               ((HANDLE)~(uintptr_t)0)
     494/** The pseudohandle for the current thread. */
     495#define MY_NT_CURRENT_THREAD                ((HANDLE)~(uintptr_t)1)
     496
     497typedef struct MY_CLIENT_ID
     498{
     499    HANDLE UniqueProcess;
     500    HANDLE UniqueThread;
     501} MY_CLIENT_ID;
     502
     503/** Partial TEB.   */
     504typedef struct MY_PARTIAL_TEB
     505{
     506    NT_TIB          NtTib;
     507    PVOID           EnvironmentPointer;
     508    MY_CLIENT_ID    ClientId;
     509    PVOID           ActiveRpcHandle;
     510    PVOID           ThreadLocalStoragePointer;
     511    PPEB            ProcessEnvironmentBlock;
     512    KU32            LastErrorValue;
     513    KU32            CountOfOwnedCriticalSections;
     514    PVOID           CsrClientThread;
     515    PVOID           Win32ThreadInfo;
     516} MY_PARTIAL_TEB;
     517
     518/** Internal macro for reading uintptr_t sized TEB members. */
     519#if K_ARCH == K_ARCH_AMD64
     520# define MY_NT_READ_TEB_WORKER(a_offTebMember) ( __readgsqword(a_offTebMember) )
     521#elif K_ARCH == K_ARCH_X86
     522# define MY_NT_READ_TEB_WORKER(a_offTebMember) ( __readfsdword(a_offTebMember) )
     523#else
     524# else "Port me!"
     525#endif
     526/** Get the PEB pointer.
     527 * @remark Needs stddef.h. */
     528#define MY_NT_CURRENT_PEB()  ( (PPEB)MY_NT_READ_TEB_WORKER(offsetof(MY_PARTIAL_TEB, ProcessEnvironmentBlock)) )
     529/** Get the TEB pointer.
     530 * @remark Needs stddef.h. */
     531#define MY_NT_CURRENT_TEB()  ( (PTEB)MY_NT_READ_TEB_WORKER(offsetof(NT_TIB, Self)) )
     532
    482533
    483534/*******************************************************************************
     
    488539                                                PLARGE_INTEGER, ULONG, ULONG, ULONG, ULONG, PVOID, ULONG);
    489540extern MY_NTSTATUS (WINAPI * g_pfnNtDeleteFile)(MY_OBJECT_ATTRIBUTES *);
     541extern MY_NTSTATUS (WINAPI * g_pfnNtDuplicateObject)(HANDLE hSrcProc, HANDLE hSrc, HANDLE hDstProc, HANDLE *phRet,
     542                                                     MY_ACCESS_MASK fDesiredAccess, ULONG fAttribs, ULONG fOptions);
    490543extern MY_NTSTATUS (WINAPI * g_pfnNtReadFile)(HANDLE hFile, HANDLE hEvent, MY_IO_APC_ROUTINE *pfnApc, PVOID pvApcCtx,
    491544                                              MY_IO_STATUS_BLOCK *, PVOID pvBuf, ULONG cbToRead, PLARGE_INTEGER poffFile,
     
    509562extern UCHAR       (WINAPI * g_pfnRtlUpperChar)(UCHAR uch);
    510563extern ULONG       (WINAPI * g_pfnRtlNtStatusToDosError)(MY_NTSTATUS rcNt);
     564extern VOID        (WINAPI * g_pfnRtlAcquirePebLock)(VOID);
     565extern VOID        (WINAPI * g_pfnRtlReleasePebLock)(VOID);
    511566
    512567
Note: See TracChangeset for help on using the changeset viewer.