hola nahumof, yo creo que tienes que leer un poco mas acerca de esto, Todo el sistema se basa en abrir y cerra PIPES, que nos sierven para establecer la comunicación, esto es independiente de los descriptores, pues esto como tu dices de abrir o cerrar, es nada mas enel pograma de LAbview ya que cada PIPE que abres tiene un proceso individual, basico Abrir, Leer, y Cerrar, porque sino lo haces no te va a jalar, por eso en cada CALL, se necesitan declarar las variables y especifcar si es de lectrua o escritura, o si cierra o abre, . aqui te posteo algo que lei....
Mpusbopen: (instance, pVID_PID, pEP, dwDir, dwReserved)
Devuelve el acceso al pipe del endpoints con el VID_PID asignado.
· Instance (Input): Un número de dispositivo para abrir. Normalmente, se utiliza primero la llamada de MPUSBGetDeviceCount para saber cuántos dispositivos hay.
· pVID_PID(Input):String que contiene el PID&VID del dispositivo objetivo. El formato es “vid_xxxx&pid_yyyy”. Donde xxxx es el valor del VID el yyyy el del PID, los dos en hexadecimal.
Ejemplo:
Si un dispositivo tiene un VID=0x04d8 y un PID=0x000b, el string de entrada es: “vid_0x04d8&pid_0x0010”.
Mpusbwrite: (handle, pData, dwLen, pLenght, dwMilliseconds)
· handle(Input):Identifica la pipe del endpoint que se va a escribir. La pipe unidad tiene que crearse con el atributo de acceso MP_WRITE.
· pData (Output): Puntero al buffer que contiene los datos que se van a escribir en la pipe.
· dwLen(Input):Especifica el número de bytes que se van a escribir en la pipe.
· pLenght (Output)

untero al número de bytes que se escriben al llamar esta función. MPUSBWrite pone este valor a cero antes de cualquier lectura o de chequear un error.
dwMilliseconds(Input):Especifica el intervalo de time-out en milisegundos. La función
Mpusbread(handle, pData, dwLen, pLenght, dwMilliseconds):
· handle(input):Identifica la pipe del Endpoint que se va a leer. La pipe unidad tiene que crearse con el atributo de acceso MP_READ.
· pData(output)

untero al buffer que recibe el dato leído de la pipe.
· dwLen(input): Especifica el número de bytes que hay que leer de la pipe.
· pLenght (output): Puntero al número de bytes leídos. MPUSBRead pone este valor a cero antes de cualquier lectura o de chequear un error.
· dwMilliseconds(input):Especifica el intervalo de time-out en milisegundos. La función vuelve si transcurre el intervalo aunque no se complete la operación. Si dwMilliseconds=0, la función comprueba los datos de la pipe y vuelve inmediatamente. Si dwMilliseconds es infinito, el intervalo de time-out nunca termina.
Mpusbclose (handle):
Cierra una determinada unión.
· handle(Input):Identifica la pipe del Endpoint que se va a cerrar.