Cxbx-Reloaded/import/OpenXDK/include/xhal/xfile.h

155 lines
4.4 KiB
C
Raw Normal View History

// ******************************************************************
// *
// * 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