Files
ncpfs/contrib/nss64/ncphook.h
ncpfs archive import 82706139bf Import ncpfs 2.2.1
2026-04-28 20:39:59 +02:00

224 lines
6.2 KiB
C

#ifndef __NCP_HOOK_H__
#define __NCP_HOOK_H__
#include <ntypes.h>
#include <nwtypes.h>
typedef unsigned long long nuint64;
LONG AllocateResourceTag(LONG NLMHandle, const unsigned char* description, LONG resourceType);
unsigned int GetNLMHandle(void);
void* Alloc(LONG len, nuint32 rTag);
#define PACKED __attribute__((packed))
#define NCPVerbRTag 0x5650434E
struct ncpReqInfo {
nuint8 reserved1[33] PACKED;
nuint16 conn PACKED;
nuint8 task PACKED;
nuint8 request[1] PACKED;
};
struct ncpConnInfo {
nuint8 reserved1[0x86] PACKED;
nuint32 bytesRead PACKED;
nuint32 bytesWritten PACKED;
};
struct ncpSend {
void (*ReplyKeep)(struct ncpReqInfo*, nuint32 error, nuint32 fragCount, void* addr, nuint32 len, ...);
void (*ReplyDisgard)(struct ncpReqInfo*, nuint32 error, nuint32 fragCount, void* addr, nuint32 len, ...);
void (*ReplyKeepNoFragments)(struct ncpReqInfo*, nuint32 error);
void* (*GetReplyKeepBuffer)(struct ncpReqInfo*);
void (*ReplyKeepBufferFilledOut)(struct ncpReqInfo*, nuint32 len);
void (*ReplyKeepNoFragmentsWithStation)(nuint32 conn, nuint32 error);
void (*ReplyUsingAllocBuffer)(struct ncpReqInfo*, nuint32 error, void* base, nuint32 len);
void (*ReplyKeepWithBufferAndFreePtr)(struct ncpReqInfo*, nuint32 error, void* toFree, nuint32 fragCount, void* addr, nuint32 len, ...);
void (*ReplyReleaseWithFragments)(nuint32 conn, struct ncpReqInfo*, void (*fn)());
};
nuint32 HookNCPVerb(nuint32 rTag, nuint32 ncpVerb, void (*ncpFunc)(struct ncpReqInfo*, struct ncpSend*, nuint32, nuint32 reqLen,
void* workspace, nuint32 workspaceLen));
nuint32 ReleaseNCPVerb(nuint32 rTag, nuint32 ncpVerb);
struct cacheblk {
void* address PACKED;
nuint8 y4[0x7B-0x04] PACKED;
nuint8 pinCount PACKED;
};
void cacheUnpinned(struct cacheblk*);
struct ncpSendCacheCB {
nuint8 y0[0x24-0x00] PACKED;
nuint32 connNum PACKED;
};
struct largeReadControlFrag {
nuint8 y0[0x04-0x00] PACKED;
void* fragAddr PACKED;
struct cacheblk* cacheBlock PACKED;
nuint32 fragLen PACKED;
nuint8 y10[0x14-0x10] PACKED;
nuint8 buffer[12] PACKED;
};
struct largeReadControl {
struct ncpReqInfo* info PACKED;
nuint32 connNum PACKED;
struct ncpSend* send PACKED;
nuint8 y0C[0x14-0x0C] PACKED;
nuint32 fragCount PACKED;
nuint32 y18 PACKED;
struct largeReadControlFrag frags[0] PACKED;
};
struct semaphore {
void* queue PACKED;
int value PACKED;
void* data PACKED;
};
struct nxt {
struct nxt* next PACKED;
};
struct nssVolume {
nuint8 y[0x168-0x00] PACKED;
nuint32 flags PACKED;
};
struct fh2 {
nuint8 y0[0x08-0x00] PACKED;
unsigned long long file_size PACKED;
nuint8 y10[0x14-0x10] PACKED;
nuint8 cacheShift PACKED;
nuint8 y15[0x1C-0x15] PACKED;
nuint32 opsCount PACKED;
nuint8 y20[0x38-0x20] PACKED;
struct fh2* altFH PACKED;
nuint8 y3C[0x44-0x3C] PACKED;
struct nssVolume* volume PACKED;
nuint8 y48[0x4C-0x48] PACKED;
nuint32 netwareFH PACKED;
nuint8 y50[0x60-0x50] PACKED;
struct semaphore sema PACKED;
nuint8 y6C[0x94-0x6C] PACKED;
nuint8 x94 PACKED;
nuint8 y95[0xD8-0x95] PACKED;
struct nxt locks PACKED;
};
struct fh {
nuint8 y0[0x0C-0x00] PACKED;
struct fh2* nssFH PACKED;
nuint8 y10[0x24-0x10] PACKED;
nuint32 accessMode PACKED;
nuint8 y28[0x2C-0x28] PACKED;
nuint8 x2C PACKED;
nuint8 x2D PACKED;
nuint8 y2E[0x38-0x2E] PACKED;
nuint32 nextReadAheadPage PACKED;
};
struct zComnInfo {
nuint32 errorcode PACKED;
nuint32 connection PACKED;
struct ncpConnInfo* conn PACKED;
nuint32 reserved2 PACKED;
nuint32 reserved3 PACKED;
};
struct zComnPosition {
unsigned long long offset PACKED;
nuint32 length PACKED;
void* buffer PACKED;
nuint32 reserved1 PACKED;
nuint32 written PACKED;
};
struct zComnFile {
nuint32 fileHandle PACKED;
struct fh* nssHandle PACKED;
};
struct nwconnection {
nuint8 y0[0x180] PACKED;
nuint32 maxReadCacheBuf PACKED;
struct largeReadControl* largeReadControl PACKED;
nuint32 ncpDataSize PACKED;
};
struct LB_async {
nuint8 y0[0x0C-0x00] PACKED;
struct semaphore* sema PACKED;
nuint8 y10[0x3C-0x10] PACKED;
nuint32 errorCode PACKED;
nuint32* netwareFH PACKED;
struct cacheblk* cacheBlock PACKED;
nuint8 y48[0x4C-0x48] PACKED;
nuint32 pageNumber PACKED;
nuint32 x50 PACKED;
nuint8 x54 PACKED;
nuint8 y55[0x6C-0x55] PACKED;
struct largeReadControlFrag* frag PACKED;
};
struct {
nuint8 y0[0x54-0x00] PACKED;
nuint32 readYieldRequests PACKED;
nuint8 y58[0x5C-0x58] PACKED;
nuint32 readRequests PACKED;
nuint32 writeRequests PACKED;
nuint32 readBytes PACKED;
nuint32 writtenBytes PACKED;
} Inst;
extern struct nwconnection* (**NW_connectionTable)[];
extern struct semaphore ReserveResource;
extern int PeriodicYieldCount;
extern void LBL_sSignal(struct semaphore*);
extern void LBL_sWait(struct semaphore*);
extern void LBL_cntSignal(struct semaphore*, int);
extern void LBL_cntWait(struct semaphore*, int);
extern void LBL_xSignal(struct semaphore*);
extern void LBL_xWait(struct semaphore*);
extern void mailInterrupt(void (*)(struct cacheblk*), struct cacheblk*);
extern struct cacheblk* fastReadCache(nuint32*, nuint32 block);
extern void asyncReadFileBlk(struct LB_async*, void (*)(struct LB_async*));
extern void cacheRelease(struct cacheblk*);
extern void asyncReadAhead(struct fh*);
extern void SetErrno(struct zComnInfo*, nuint32 nssErrorCode);
extern void CYieldIfNeeded(void);
extern void LB_freeAsyncio(struct LB_async*);
extern struct LB_async* LB_getAsyncio(void);
extern void COMN_Write(struct zComnInfo*, struct zComnPosition*, struct zComnFile*);
extern void COMN_SetDataSize(struct zComnInfo*, struct zComnFile*, unsigned long long offs, nuint32 flags);
extern struct fh* COMN_DoResolveFileHandle(struct zComnInfo*, struct zComnFile*);
extern void COMN_DoReleaseFileHandleIDP(struct zComnInfo*, struct zComnFile*);
extern int COMN_IsSharedByteRange(struct zComnInfo*, struct fh2*, unsigned long long offs, unsigned long long len);
extern int COMN_ReadSnapOrDontCopyToSnap(struct fh2*, unsigned int page);
extern void COMN_Release(struct fh2**);
#define zRR_READ_ACCESS 0x00000001
#define zERR_HARD_READ_ERROR 20101
#define zERR_NO_READ_PRIVILEGE 20861
#define zERR_IOLOCK_ERROR 20900
#define zATTR_COW 0x00040000
#define NCP_NSS64Verb 0xE5
#endif /* __NCP_HOOK_H__ */