x unit ULDrvu;
interface
uses windows, winioctl, ULDrvTyp;

function UL_IO(fn: DWORD): DWORD;
function UL_IOR(fn: DWORD; var aul_msginfo:ul_msginfo): DWORD;
function UL_IOW(fn: DWORD; var aul_msginfo:ul_msginfo): DWORD;

function UL_NEWMSG(var aul_msginfo:ul_msginfo): DWORD;
function UL_TAILMSG(var aul_msginfo:ul_msginfo): DWORD;
function UL_FREEMSG: DWORD;
function  UL_ACCEPTMSG(var aul_msginfo:ul_msginfo): DWORD;
function UL_ACTAILMSG(var aul_msginfo:ul_msginfo): DWORD;
function UL_ADDFILT(var aul_msginfo:ul_msginfo): DWORD;
function UL_ABORTMSG: DWORD;
function UL_REWMSG: DWORD;
function UL_INEPOLL: DWORD;
function UL_KLOGBLL: DWORD;
function UL_STROKE: DWORD;
function UL_DEBFLG: DWORD;

implementation

function UL_IO(fn: DWORD): DWORD;
begin
  UL_IO := CTL_CODE(FILE_DEVICE_ULAN, UL_IOCTL_INDEX + fn,
    METHOD_BUFFERED, FILE_ANY_ACCESS)
end;

function UL_IOR(fn: DWORD; var aul_msginfo:ul_msginfo): DWORD;
begin
  UL_IOR := CTL_CODE(FILE_DEVICE_ULAN, UL_IOCTL_INDEX + fn,
    METHOD_BUFFERED, FILE_ANY_ACCESS)
end;

function UL_IOW(fn: DWORD;  var aul_msginfo:ul_msginfo): DWORD;
begin
  UL_IOW := CTL_CODE(FILE_DEVICE_ULAN, UL_IOCTL_INDEX + fn,
    METHOD_BUFFERED, FILE_ANY_ACCESS)
end;

function UL_NEWMSG(var aul_msginfo:ul_msginfo):DWORD;
begin
  UL_NEWMSG := UL_IOW($11, aul_msginfo);
end;

function UL_TAILMSG(var aul_msginfo:ul_msginfo):DWORD;
begin
  UL_TAILMSG := UL_IOW($12, aul_msginfo)
end;

function UL_FREEMSG:DWORD;
begin
  UL_FREEMSG :=	UL_IO($13)
end;

function  UL_ACCEPTMSG(var aul_msginfo:ul_msginfo):DWORD;
begin
  UL_ACCEPTMSG := UL_IOR($14, aul_msginfo);
end;

function  UL_ACTAILMSG(var aul_msginfo:ul_msginfo):DWORD;
begin
  UL_ACTAILMSG := UL_IOR($15,aul_msginfo);
end;

function  UL_ADDFILT(var aul_msginfo:ul_msginfo):DWORD;
begin
  UL_ADDFILT := UL_IOW($16,aul_msginfo);
end;

function UL_ABORTMSG: DWORD;
begin
  UL_ABORTMSG := UL_IO($17);
end;

function UL_REWMSG: DWORD;
begin
  UL_REWMSG := UL_IO($18);
end;

function UL_INEPOLL: DWORD;
begin
  UL_INEPOLL := UL_IO($19);
end;

function UL_KLOGBLL: DWORD;
begin
  UL_KLOGBLL := UL_IO($41);
end;

function UL_STROKE: DWORD;
begin
  UL_STROKE := UL_IO($42);
end;

function UL_DEBFLG: DWORD;
begin
  UL_DEBFLG := UL_IO($43)
   { arg = new debug mask }
end;

end.
