NTSTATUS LpxTdiOpenConnection_LSTrans ( IN PVOID ConnectionContext, OUT PHANDLE ConnectionFileHandle, OUT PFILE_OBJECT *ConnectionFileObject ) { return LpxTdiOpenConnection(ConnectionFileHandle, ConnectionFileObject, ConnectionContext); }
NTSTATUS MakeConnectionObject( HANDLE AddressFileHandle, PFILE_OBJECT AddressFileObject, HANDLE *ListenFileHandle, PFILE_OBJECT *ListenFileObject ) { HANDLE listenFileHandle; PFILE_OBJECT listenFileObject; NTSTATUS ntStatus; UNREFERENCED_PARAMETER(AddressFileObject); ntStatus = LpxTdiOpenConnection( &listenFileHandle, &listenFileObject, NULL ); if(!NT_SUCCESS(ntStatus)) { ASSERT(LPX_BUG); *ListenFileHandle = NULL; *ListenFileObject = NULL; return ntStatus; } ntStatus = LpxTdiAssociateAddress( listenFileObject, AddressFileHandle ); if(!NT_SUCCESS(ntStatus)) { ASSERT(LPX_BUG); LpxTdiCloseConnection(listenFileHandle, listenFileObject); *ListenFileHandle = NULL; *ListenFileObject = NULL; return ntStatus; } *ListenFileHandle = listenFileHandle; *ListenFileObject = listenFileObject; return ntStatus; }
NTSTATUS DraidListenConnection( PDRAID_LISTEN_CONTEXT ListenContext ) { NTSTATUS status; // KIRQL oldIrql; KeClearEvent(&ListenContext->TdiListenContext.CompletionEvent); status = LpxTdiOpenConnection( &ListenContext->ListenFileHandle, &ListenContext->ListenFileObject, NULL); if(!NT_SUCCESS(status)) { ASSERT(FALSE);// This should not happen return status; } // 3. Associate address status = LpxTdiAssociateAddress( ListenContext->ListenFileObject, ListenContext->AddressFileHandle ); if(!NT_SUCCESS(status)) { ASSERT(FALSE); LpxTdiCloseConnection(ListenContext->ListenFileHandle, ListenContext->ListenFileObject); return status; } // 4. Start listening ListenContext->Flags = TDI_QUERY_ACCEPT; //??? status = LpxTdiListenWithCompletionEvent( ListenContext->ListenFileObject, &ListenContext->TdiListenContext, &ListenContext->Flags ); if(!NT_SUCCESS(status)) { ASSERT(FALSE); // May be this can be happen if multiple instances of this function is called with same address LpxTdiDisassociateAddress(ListenContext->ListenFileObject); LpxTdiCloseConnection(ListenContext->ListenFileHandle, ListenContext->ListenFileObject); return status; } return status; }