Collapse the table of content
Expand the table of content

DeletePersistentTcpPortReservation function

The DeletePersistentTcpPortReservation function deletes a persistent TCP port reservation for a consecutive block of TCP ports on the local computer.


ULONG WINAPI DeletePersistentTcpPortReservation(
  _In_ USHORT StartPort,
  _In_ USHORT NumberOfPorts


StartPort [in]

The starting TCP port number in network byte order.

NumberOfPorts [in]

The number of TCP port numbers to delete.

Return value

If the function succeeds, the return value is NO_ERROR.

If the function fails, the return value is one of the following error codes.

Return codeDescription

Access is denied. This error is returned under several conditions that include the following: the user lacks the required administrative privileges on the local computer or the application is not running in an enhanced shell as the built-in Administrator (RunAs administrator).


An invalid parameter was passed to the function. This error is returned if zero is passed in the StartPort or NumberOfPorts parameters.


The element was not found. This error is returned if persistent port block specified by the StartPort and NumberOfPorts parameters could not be found.


Use FormatMessage to obtain the message string for the returned error.



The DeletePersistentTcpPortReservation function is defined on Windows Vista and later.

The DeletePersistentTcpPortReservation function is used to delete a persistent reservation for a block of TCP ports.

The DeletePersistentTcpPortReservation function can only be called by a user logged on as a member of the Administrators group. If DeletePersistentTcpPortReservation is called by a user that is not a member of the Administrators group, the function call will fail and ERROR_ACCESS_DENIED is returned. This function can also fail because of user account control (UAC) on Windows Vista and later. If an application that contains this function is executed by a user logged on as a member of the Administrators group other than the built-in Administrator, this call will fail unless the application has been marked in the manifest file with a requestedExecutionLevel set to requireAdministrator. If the application lacks this manifest file, a user logged on as a member of the Administrators group other than the built-in Administrator must then be executing the application in an enhanced shell as the built-in Administrator (RunAs administrator) for this function to succeed.


The following example deletes a persistent TCP port reservation.

This example must be run by a user that is a member of the Administrators group. The simplest way to run this example is in an enhanced shell as the built-in Administrator (RunAs administrator).

#ifndef UNICODE
#define UNICODE


#include <Windows.h.>
#include <winsock2.h>
#include <ws2ipdef.h> 
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>

// Need to link with iphlpapi.lib
#pragma comment(lib, "iphlpapi.lib")

// Need to link with ws2_32.lib for htons
#pragma comment(lib, "ws2_32.lib")

int wmain(int argc, WCHAR **argv)  {

    // Declare and initialize variables
    int startPort = 0;         // host byte order
    int numPorts = 0;
    USHORT startPortns = 0;    // Network byte order
    unsigned long status = 0;

    // Validate the parameters
    if (argc != 3) {
        wprintf(L"usage: %s <Starting Port> <Number of Ports>\n", argv[0]);
        wprintf(L"Delete a persistent TCP port reservation\n");
        wprintf(L"Example usage:\n");
        wprintf(L"   %s 5000 20\n", argv[0]);
        wprintf(L"   where StartPort=5000 NumPorts=20");
        return 1;

    startPort = _wtoi(argv[1]);
    if ( startPort < 0 || startPort> 65535) {
        wprintf(L"Starting point must be either 0 or between 1 and 65,535\n");
        return 1;
    startPortns = htons((u_short) startPort);

    numPorts = _wtoi(argv[2]);
    if (numPorts < 0) {
        wprintf(L"Number of ports must be a positive number\n");
        return 1;

    status = DeletePersistentTcpPortReservation((USHORT) startPortns, (USHORT) numPorts);
    if( status != NO_ERROR )
        wprintf(L"DeletePersistentTcpPortReservation returned error: %ld\n", 
        return 1;

    wprintf(L"DeletePersistentTcpPortReservation call succeeded\n");  

    return 0;


Minimum supported client

Windows Vista [desktop apps only]

Minimum supported server

Windows Server 2008 [desktop apps only]







See also




Community Additions

© 2015 Microsoft