예제 #1
0
NTSTATUS
LpxTdiOpenConnection_LSTrans (
		IN PVOID			ConnectionContext,
		OUT PHANDLE			ConnectionFileHandle,
		OUT	PFILE_OBJECT	*ConnectionFileObject
	) {

	return LpxTdiOpenConnection(ConnectionFileHandle, ConnectionFileObject, ConnectionContext);
}
예제 #2
0
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;
}
예제 #3
0
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;
}