Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 2000.
//
// File: W S D P S V C . C P P
//
// Contents: Start/stop Winsock Direct Path Service.
//
// Notes: The service is actually implemented in MS TCP Winsock provider
//
// Author: VadimE 24 Jan 2000
//
//----------------------------------------------------------------------------
#include "pch.h"
#pragma hdrstop
#include "wsdpsvc.h"
#define MSTCP_PROVIDER_DLL TEXT("mswsock.dll")
#define START_WSDP_FUNCTION_NAME "StartWsdpService"
#define STOP_WSDP_FUNCTION_NAME "StopWsdpService"
// MS TCP Winsock provider module handle
HINSTANCE ghMsTcpDll;
// Service start function pointer
typedef INT (WINAPI *PFN_START_WSDP_SVC) (VOID); PFN_START_WSDP_SVC gpfnStartWsdpSvc;
// Service stop function pointer
typedef VOID (WINAPI *PFN_STOP_WSDP_SVC) (VOID); PFN_STOP_WSDP_SVC gpfnStopWsdpSvc;
//+---------------------------------------------------------------------------
// StartWsdpService - start WSDP service if running on DTC
//
//
VOID StartWsdpService ( VOID ) { NTSTATUS status; NT_PRODUCT_TYPE product;
//
// First check if we are running Server build
//
status = RtlGetNtProductType (&product); if (!NT_SUCCESS (status) || (product == NtProductWinNt)) { return; }
//
// Load MS TCP provider and get WSDP service entry points
//
ghMsTcpDll = LoadLibrary (MSTCP_PROVIDER_DLL); if (ghMsTcpDll!=NULL) { gpfnStartWsdpSvc = (PFN_START_WSDP_SVC) GetProcAddress ( ghMsTcpDll, START_WSDP_FUNCTION_NAME); gpfnStopWsdpSvc = (PFN_STOP_WSDP_SVC) GetProcAddress ( ghMsTcpDll, STOP_WSDP_FUNCTION_NAME); if (gpfnStartWsdpSvc != NULL && gpfnStopWsdpSvc != NULL) { //
// Launch the service and return if succeded
//
INT err = (*gpfnStartWsdpSvc)(); if (err==0) { return; } } //
// Cleanup if anything fails
//
FreeLibrary (ghMsTcpDll); ghMsTcpDll = NULL; } }
//+---------------------------------------------------------------------------
// StopWsdpService - stop WSDP service if it was started
//
//
VOID StopWsdpService ( VOID ) { if (ghMsTcpDll!=NULL) { //
// Tell the service to stop and unload the provider
//
(*gpfnStopWsdpSvc)(); FreeLibrary (ghMsTcpDll); ghMsTcpDll = NULL; } }
|