windows-nt/Source/XPSP1/NT/drivers/storage/drivearb/inc/dlmhdr.h
2020-09-26 16:20:57 +08:00

95 lines
2.4 KiB
C

#ifndef _DLM_H
#define _DLM_H
#define DLM_VERSION 1
#define DLM_VBLK_SZ 32
typedef HANDLE dlm_lockid_t;
typedef UCHAR dlm_nodeid_t;
typedef CHAR dlm_mode_t;
typedef HANDLE dlm_lockval_t;
typedef HANDLE dlm_cevent_t;
typedef HANDLE dlm_bevent_t;
typedef char dlm_vblk[DLM_VBLK_SZ];
typedef dlm_vblk *dlm_vblk_t;
typedef enum {
DLM_MODE_INVAL = -1,
DLM_MODE_NL = 0,
DLM_MODE_CR = 1,
DLM_MODE_CW = 2,
DLM_MODE_PR = 3,
DLM_MODE_PW = 4,
DLM_MODE_EX = 5
}dlm_mode_type_t;
#define DLM_ERROR_SUCCESS 0
#define DLM_ERROR_GRANTED 0
#define DLM_ERROR_QUEUED 1
#define DLM_ERROR_CANCELED 2
#define DLM_ERROR_BADID 11
#define DLM_ERROR_NOMEM 12
#define DLM_ERROR_BADMODE 13
#define DLM_ERROR_NOOP 15
#define DLM_ERROR_WOULDBLOCK 16
#define DLM_ERROR_INVAL 17
#define DLM_ERROR_INVALOP 18
#define DLM_ERROR_LOCKWAIT 19
#define DLM_ERROR_BUSY 20
#define DLM_ERROR_NOTOWNER 21
// List of DLM supported Flags
#define DLM_FLAGS_FASTLOCK 0x0001 // issue convert without fairness
#define DLM_FLAGS_TRYLOCK 0x0002 // if can't get it, don't bother
#define DLM_FLAGS_ASYNC 0x0004 // don't block
#define DLM_FLAGS_EVBLOCK 0x0008 // register callback/event on this lock
#define DLM_FLAGS_VBIO 0x0010 // rw value block
#define DLM_FLAGS_VBIV 0x0020 // invalidate value block
// *** from WDM.H (apps can't be expected to have this defined) ***
typedef ULONG NTSTATUS;
typedef struct _IO_STATUS_BLOCK {
union {
NTSTATUS Status;
PVOID Pointer;
};
ULONG_PTR Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
typedef
VOID
(NTAPI *PIO_APC_ROUTINE) (
IN PVOID ApcContext,
IN PIO_STATUS_BLOCK IoStatusBlock,
IN ULONG Reserved);
// *****************************************************************
int InitializeDistributedLockManager(dlm_nodeid_t *nodeid);
int InitializeDistributedLock(dlm_lockid_t *lock, dlm_lockid_t parent, char *name, int sz);
int ConvertDistributedLock(dlm_lockid_t lock, dlm_mode_t mode);
int ConvertDistributedLockEx(dlm_lockid_t lock, dlm_mode_t mode, int flags, dlm_vblk_t vblk,
PIO_APC_ROUTINE callback, PVOID arg,
HANDLE event, PIO_STATUS_BLOCK iostatus);
int QueueDistributedLockEvent(dlm_lockid_t lock, PIO_APC_ROUTINE callback, PVOID arg,
HANDLE event, PIO_STATUS_BLOCK iostatus);
int DestroyDistributedLock(dlm_lockid_t lock);
#endif