155 lines
4.2 KiB
C
155 lines
4.2 KiB
C
// ******************************************************************
|
|
// *
|
|
// * proj : OpenXDK
|
|
// *
|
|
// * desc : Open Source XBox Development Kit
|
|
// *
|
|
// * file : xfile.h
|
|
// *
|
|
// * note : XBox File Access
|
|
// *
|
|
// ******************************************************************
|
|
// * TODO: most of this belongs in a different .h
|
|
// ******************************************************************
|
|
#ifndef XFILE_H
|
|
#define XFILE_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "xboxkrnl\xboxkrnl.h"
|
|
|
|
#define INVALID_HANDLE_VALUE ((HANDLE)-1)
|
|
#define INVALID_FILE_SIZE ((HANDLE)-1)
|
|
#define DELETE (0x00010000L)
|
|
|
|
#ifndef PAGE_SIZE
|
|
#define PAGE_SIZE 4096
|
|
#endif
|
|
#define ALIGN_SIZE (0x10000) // NT's allocation alignment size (64k)
|
|
|
|
// PAGE_ALIGN:
|
|
// Returns an address rounded down to the nearest page boundary.
|
|
// Differences from NT: None.
|
|
#define NT_SUCCESS(Status) ((NTSTATUS) (Status) >= 0)
|
|
#define PAGE_ALIGN(Va) ((PVOID)((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
|
|
|
|
|
|
// Initializes an OBJECT_ATTRIBUTES. I added this because it's familiar to
|
|
// NT kernel mode programmers. I just changed it to the XBOX style.
|
|
// Works as if it were this function:
|
|
#define InitializeObjectAttributes( p, n, a, r ) { \
|
|
(p)->RootDirectory = r; \
|
|
(p)->Attributes = a; \
|
|
(p)->ObjectName = n; \
|
|
}
|
|
|
|
|
|
//unsure where these really belong
|
|
#define MAX_PATH (2048)
|
|
#define ERROR_NEGATIVE_SEEK (131)
|
|
#define ERROR_INVALID_NAME (123)
|
|
#define ERROR_OPEN_FAILED (110)
|
|
#define ERROR_DRIVE_LOCKED (108)
|
|
#define ERROR_HANDLE_DISK_FULL (39)
|
|
#define ERROR_ALREADY_EXISTS (183)
|
|
#define ERROR_INVALID_PARAMETER (1)
|
|
#define ERROR_FILE_NOT_FOUND (2)
|
|
#define ERROR_TOO_MANY_OPEN_FILES (4)
|
|
#define ERROR_INVALID_HANDLE (6)
|
|
#define ERROR_NOT_ENOUGH_MEMORY (0x100000)
|
|
#define NO_ERROR (0)
|
|
|
|
typedef char* LPCSTR;
|
|
|
|
// ==============================================
|
|
// end stuff that belong in some xboxwindows.h
|
|
// ==============================================
|
|
|
|
// these structs need to be here as they are used as parameters
|
|
typedef struct SSecurity_Attributes{
|
|
u32 nLength;
|
|
void* lpSecurityDescriptor;
|
|
u32 bInheritHandle;
|
|
} SSecurity_Attributes, *PSecurity_Attributes ;
|
|
|
|
|
|
typedef struct _OVERLAPPED {
|
|
u32 Internal;
|
|
u32 InternalHigh;
|
|
u32 Offset;
|
|
u32 OffsetHigh;
|
|
HANDLE hEvent;
|
|
} OVERLAPPED, *LPOVERLAPPED;
|
|
|
|
|
|
// Standard
|
|
#define FILE_FLAG_WRITE_THROUGH (0x80000000)
|
|
#define FILE_FLAG_OVERLAPPED (0x40000000)
|
|
#define FILE_FLAG_NO_BUFFERING (0x20000000)
|
|
#define FILE_FLAG_RANDOM_ACCESS (0x10000000)
|
|
#define FILE_FLAG_SEQUENTIAL_SCAN (0x08000000)
|
|
#define FILE_FLAG_DELETE_ON_CLOSE (0x04000000)
|
|
#define FILE_FLAG_BACKUP_SEMANTICS (0x02000000)
|
|
#define FILE_FLAG_POSIX_SEMANTICS (0x01000000)
|
|
#define FILE_FLAG_OPEN_REPARSE_POINT (0x00200000)
|
|
#define FILE_FLAG_OPEN_NO_RECALL (0x00100000)
|
|
|
|
#define CREATE_NEW (0x00000001)
|
|
#define CREATE_ALWAYS (0x00000002)
|
|
#define OPEN_EXISTING (0x00000003)
|
|
#define OPEN_ALWAYS (0x00000004)
|
|
#define TRUNCATE_EXISTING (0x00000005)
|
|
|
|
|
|
#define GENERIC_READ (0x80000000)
|
|
#define GENERIC_WRITE (0x40000000)
|
|
|
|
#define FILE_BEGIN (0x00000000)
|
|
#define FILE_CURRENT (0x00000001)
|
|
#define FILE_END (0x00000002)
|
|
|
|
|
|
HANDLE CreateFile(char* lpFilename,
|
|
u32 dwDesiredAccess,
|
|
u32 dwShareMode,
|
|
SSecurity_Attributes *lpSecurityAttributes,
|
|
u32 dwCreationDisposition,
|
|
u32 dwFlagsAndAttributes,
|
|
HANDLE hTemplateFile
|
|
);
|
|
int ReadFile( HANDLE hFile, // file handle
|
|
void* lpBuffer, // Dest buffer to put file
|
|
u32 nNumberOfBytesToRead, // read "n" bytes
|
|
u32* lpNumberOfBytesRead, // pointer to a place to store bytes read
|
|
LPOVERLAPPED lpOverlapped // NULL unless overlap
|
|
);
|
|
|
|
int WriteFile( HANDLE hFile,
|
|
PVOID lpBuffer,
|
|
u32 nNumberOfBytesToWrite,
|
|
u32* lpNumberOfBytesWritten,
|
|
LPOVERLAPPED lpOverlapped
|
|
);
|
|
|
|
int CloseHandle(HANDLE Handle);
|
|
int GetFileSizeEx(HANDLE hFile, PLARGE_INTEGER lpFileSize);
|
|
int SetFilePointerEx(HANDLE hFile, LARGE_INTEGER liDistanceToMove, PLARGE_INTEGER lpNewFilePointer, DWORD dwMoveMethod);
|
|
|
|
|
|
|
|
char* GetLastErrorMessage( void );
|
|
void SetLastError( u32 ErrorCode );
|
|
|
|
|
|
#ifdef __cplusplus
|
|
};
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|