/** * Send an I/O control request to the Alfresco CIFS server, receive and validate the response * * @param ctlCode const unsigned int * @param reqbuf DataBuffer& * @param respbuf DataBuffer& */ void AlfrescoInterface::sendIOControl( const unsigned int ctlCode, DataBuffer& reqbuf, DataBuffer& respbuf) { // Send the I/O control request, receive the response DWORD retLen = 0; BOOL res = DeviceIoControl( m_handle, ctlCode, reqbuf.getBuffer(), reqbuf.getLength(), respbuf.getBuffer(), respbuf.getBufferLength(), &retLen, (LPOVERLAPPED) NULL); if ( res) { // Validate the reply signature if ( retLen >= IOSignatureLen) { respbuf.setLength(retLen); respbuf.setEndOfBuffer(); String sig = respbuf.getString(IOSignatureLen, false); if ( sig.equals(IOSignature) == false) throw Exception( L"Invalid I/O control signature received"); } } else throw Exception( L"Send I/O control error", Integer::toString( GetLastError())); }