==== FS_NMPIPE ====
**Purpose**
Perform a special purpose named pipe operation remotely.
**Calling Sequence**
int far pascal FS_NMPIPE(psffsi, psffsd, OpType, pOpRec, pData, pName)
struct sffsi far * psffsi;
struct sffsd far * psffsd;
unsigned short OpType;
union npoper far * pOpRec;
char far * pData;
char far * pName;
**Where**
//psffsi// is a pointer to the file-system-independent portion of an open file instance.
//psffsd// is a pointer to the file-system-dependent portion of an open file instance.
//OpType// is the operation to be performed. This parameter has the following values:
|NMP_GetPHandState |0x21 |
|NMP_SetPHandState |0x01 |
|NMP_PipeQInfo |0x22 |
|NMP_PeekPipe |0x23 |
|NMP_ConnectPipe |0x24 |
|NMP_DisconnectPipe |0x25 |
|NMP_TransactPipe |0x26 |
|NMP_ReadRaw |0x11 |
|NMP_WriteRaw |0x31 |
|NMP_WaitPipe |0x53 |
|NMP_CallPipe |0x54 |
|NMP_QNmPipeSemState |0x58 |
//pOpRec// is the data record which varies depending on the value of //OpType//. The first parameter in each structure encodes the length of the parameter block. The second parameter, if non-zero, indicates that the pData parameter is supplied and gives its length. The following record formats are used:
union npoper {
struct phs_param phs;
struct npi_param npi;
struct npr_param npr;
struct npw_param npw;
struct npq_param npq;
struct npx_param npx;
struct npp_param npp;
struct npt_param npt;
struct qnps_param qnps;
struct npc_param npc;
struct npd_param npd;
};
/* Get/SetPhandState parameter block */
struct phs_param {
short phs_len;
short phs_dlen;
short phs_pmode; /* pipe mode set or returned */
};
/* DosQNmPipeInfo parameter block */
struct npi_param {
short npi_len;
short npi_dlen;
short npi_level; /* information level desired */
};
/* DosRawReadNmPipe parameters */
/* data is buffer addr */
struct npr_param {
short npr_len;
short npr_dlen;
short npr_nbyt; /* number of bytes read */
};
/* DosRawWriteNmPipe parameters */
/* data is buffer addr */
struct npw_param {
short npw_len;
short npw_dlen;
short npw_nbyt; /* number of bytes written */
};
/* NPipeWait parameters */
struct npq_param {
short npq_len;
short npq_dlen;
long npq_timeo; /* time-out in milliseconds */
short npq_prio; /* priority of caller */
};
/* DosCallNmPipe parameters */
/* data is in-buffer addr */
struct npx_param {
short npx_len;
unsigned short npx_ilen; /* length of in-buffer */
char far * npx_obuf; /* pointer to out-buffer */
unsigned short npx_ilen; /* length of out-buffer */
unsigned short npx_nbyt; /* number of bytes read */
long npx_timeo; /* time-out in milliseconds */
};
/* PeekPipe parameters, data is buffer addr */
struct npp_param {
short npp_len;
unsigned short npp_dlen;
unsigned short npp_nbyt; /* number of bytes read */
unsigned short npp_av10; /* bytes left in pipe */
unsigned short npp_av11; /* bytes left in current msg */
unsigned short npp_state; /* pipe state */
};
/* DosTransactNmPipe parameters */
/* data is in-buffer addr */
struct npt_param {
short npt_len;
unsigned short npt_ilen; /* length of in-buffer */
char far * npt_obuf; /* pointer to out-buffer */
unsigned short npt_olen; /* length of out-buffer */
unsigned short npt_nbyt; /* number of bytes read */
};
/* QNmPipeSemState parameter block */ /* data is user data buffer */
struct qnps_param {
unsigned short qnps_len; /* length of parameter block */
unsigned short qnps_dlen; /* length of supplied data block */
long qnps_semh; /* system semaphore handle */
unsigned short qnps_nbyt; /* number of bytes returned */
};
/* ConnectPipe parameter block, no data block */
struct npc_param {
unsigned short npc_len; /* length of parameter block */
unsigned short npc_dlen; /* length of data block */
};
/* DisconnectPipe parameter block, no data block */
struct npd_param {
unsigned short npd_len; /* length of parameter block */
unsigned short npd_dlen; /* length of data block */
};
//pData// is a pointer to a user data for operations which require it. When the pointer is supplied, its length will be given by the second element of the //pOpRec// structure.
//pName// is a pointer to a remote pipe name. Supplied only for //NMP_WAITPIPE// and //NMP_CALLPIPE// operations. For these two operations only, the psffsi and psffsd parameters have no significance.
**Remarks**
This entry point is for support of special remote named pipe operations. Not all pointer parameters are used for all operations. In cases where a particular pointer has no significance, it will be NULL.
This entry point will be called only for the UNC FSD. Non-UNC FSDs are required to have this entry point, but should return NOT SUPPORTED if called.