AndreJAO
Messages postés
24
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
2 septembre 2007
10 déc. 2006 à 12:47
Suggestion pour la création
hPipeInst = CreateNamedPipe(
lpszPipename, // pipe name
PIPE_FLAG_OVERLAPPED |
PIPE_ACCESS_DUPLEX, // read/write access
PIPE_TYPE_MESSAGE | // message type pipe
PIPE_READMODE_MESSAGE | // message-read mode
PIPE_WAIT, // blocking mode
PIPE_UNLIMITED_INSTANCES, 4096, // output buffer size
4096, // input buffer size
2000, // client time-out
NULL);
Pour la suppression en général il s'agit de la problématisue du cilient et non pas du serveur. Pour identifier les clients tu peux utiliser NetFileEnum et pour les forcer à lacher le pipe NetSessionDel
cela donnerait àpeu près ceci:
//A invoquer avant création du pipe par le process serveur
//szPrefix=ton nom de pipe
//bClose flag pour déconnecter le client (à défaut simple comptage
DWORD GetFileSession(char *szPrefix,BOOL bClose)
{
NET_API_STATUS nas;
FILE_INFO_3 *fi3 = NULL;
DWORD prefmaxlen=1024;
DWORD entriesread;
DWORD totalentries;
TCHAR netPrefFile[80];//,netserver[16];
char tmp[80];
MultiByteToWideChar(CP_ACP, 0, szPrefix, -1, netPrefFile, 79);
nas= NetFileEnum(NULL,//netserver,
netPrefFile,//pPref,//NULL,
NULL,3,(LPBYTE *)&fi3,
prefmaxlen,
&entriesread,
&totalentries,
NULL);
if (fi3)
{
if(WideCharToMultiByte(CP_ACP, 0,fi3->fi3_pathname,-1,tmp,80,NULL,NULL))
{
if(0!=strnicmp(tmp,szPrefix,strlen(tmp)))
totalentries=0;
else if(bClose)
{
NetSessionDel(NULL, NULL,fi3->fi3_username);
NetApiBufferFree(fi3);
return C_GetFileSession(szPrefix,FALSE);
}
}
else
totalentries=0;
NetApiBufferFree(fi3);
}
return totalentries;
}