LPFN_RIOREGISTERBUFFER fonction de rappel (mswsock.h)
La fonction RIORegisterBuffer inscrit un RIO_BUFFERID, un descripteur de mémoire tampon inscrit, avec une mémoire tampon spécifiée pour une utilisation avec les extensions d’E/S inscrites dans Winsock.
Syntaxe
LPFN_RIOREGISTERBUFFER LpfnRioregisterbuffer;
RIO_BUFFERID LpfnRioregisterbuffer(
PCHAR DataBuffer,
DWORD DataLength
)
{...}
Paramètres
DataBuffer
Pointeur vers le début de la mémoire tampon à inscrire.
DataLength
Longueur, en octets, dans la mémoire tampon à inscrire.
Valeur retournée
Si aucune erreur ne se produit, la fonction RIORegisterBuffer retourne un descripteur de mémoire tampon inscrit. Sinon, une valeur de RIO_INVALID_BUFFERID est retournée et un code d’erreur spécifique peut être récupéré en appelant la fonction WSAGetLastError .
Code de retour | Description |
---|---|
Le système a détecté une adresse de pointeur non valide lors de la tentative d’utilisation d’un argument pointeur dans un appel. Cette erreur est retournée si un pointeur de mémoire tampon non valide est passé dans le paramètre DataBuffer . |
|
Un paramètre non valide a été transmis à la fonction. Cette erreur est retournée si le paramètre DataLength est égal à zéro. |
Remarques
La fonction RIORegisterBuffer crée un identificateur de mémoire tampon inscrit pour une mémoire tampon spécifiée. Lorsqu’une mémoire tampon est inscrite, les pages de mémoire virtuelle contenant la mémoire tampon sont verrouillées dans la mémoire physique.
Si plusieurs mémoires tampons non contiguës de petite taille sont inscrites, l’empreinte mémoire physique des mémoires tampons peut effectivement être aussi grande qu’une page de mémoire entière par inscription. Dans ce cas, il peut être utile d’allouer plusieurs mémoires tampons de requête ensemble.
Il existe également une petite quantité de surcharge dans la mémoire physique utilisée pour l’inscription de la mémoire tampon elle-même. Par conséquent, s’il existe de nombreuses allocations agrégées en une seule allocation plus importante, l’empreinte mémoire physique peut être réduite davantage en agrégeant également les inscriptions de mémoire tampon. Dans ce cas, l’application peut nécessiter une attention particulière pour s’assurer que les mémoires tampons sont finalement désinscrits, mais pas pendant que les demandes d’envoi ou de réception sont en attente.
Une partie d’une mémoire tampon inscrite est transmise aux fonctions RIOSend, RIOSendEx, RIOReceive et RIOReceiveEx dans le paramètre pData pour l’envoi ou la réception de données.
Lorsque l’identificateur de mémoire tampon n’est plus nécessaire, appelez la fonction RIODeregisterBuffer pour désinscrire l’identificateur de mémoire tampon.
Notes
Le pointeur de la fonction vers la fonction RIORegisterBuffer doit être obtenu au moment de l’exécution en appelant la fonction WSAIoctl avec l’opcode SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER spécifié. La mémoire tampon d’entrée passée à la fonction WSAIoctl doit contenir WSAID_MULTIPLE_RIO, un identificateur global unique (GUID) dont la valeur identifie les fonctions d’extension d’E/S inscrites dans Winsock. En cas de réussite, la sortie retournée par la fonction WSAIoctl contient un pointeur vers la structure RIO_EXTENSION_FUNCTION_TABLE qui contient des pointeurs vers les fonctions d’extension d’E/S inscrites dans Winsock. Le SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER IOCTL est défini dans le fichier d’en-tête Ws2def.h . Le GUID WSAID_MULTIPLE_RIO est défini dans le fichier d’en-tête Mswsock.h .
Windows Phone 8 : cette fonction est prise en charge pour les applications du Store Windows Phone Windows Phone 8 et versions ultérieures.
Windows 8.1 et Windows Server 2012 R2 : cette fonction est prise en charge pour les applications du Windows Store sur Windows 8.1, Windows Server 2012 R2 et versions ultérieures.
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | mswsock.h |