Функция DeletePersistentTcpPortReservation (iphlpapi.h)
Функция DeletePersistentTcpPortReservation удаляет постоянное резервирование TCP-портов для последовательного блока TCP-портов на локальном компьютере.
Синтаксис
IPHLPAPI_DLL_LINKAGE ULONG DeletePersistentTcpPortReservation(
[in] USHORT StartPort,
[in] USHORT NumberOfPorts
);
Параметры
[in] StartPort
Начальный номер TCP-порта в порядке сетевых байтов.
[in] NumberOfPorts
Число удаляемых номеров TCP-портов.
Возвращаемое значение
Если функция выполняется успешно, возвращаемое значение будет NO_ERROR.
Если функция завершается сбоем, возвращаемое значение представляет собой один из следующих кодов ошибок.
Код возврата | Описание |
---|---|
|
Отказано в доступе". Эта ошибка возвращается при нескольких условиях, которые включают следующее: у пользователя отсутствуют необходимые права администратора на локальном компьютере или приложение не выполняется в расширенной оболочке в качестве встроенного администратора (администратора запуска от имени). |
|
В функцию передан недопустимый параметр. Эта ошибка возвращается, если в параметрах StartPort или NumberOfPorts передается ноль. |
|
Элемент не обнаружен. Эта ошибка возвращается, если не удалось найти постоянный блок портов, указанный параметрами StartPort и NumberOfPorts . |
|
Используйте FormatMessage , чтобы получить строку сообщения для возвращенной ошибки. |
Комментарии
Функция DeletePersistentTcpPortReservation определена в Windows Vista и более поздних версиях.
Функция DeletePersistentTcpPortReservation используется для удаления постоянного резервирования для блока TCP-портов.
Функция DeletePersistentTcpPortReservation может вызываться только пользователем, вошедшего в систему как член группы Администраторы. Если метод DeletePersistentTcpPortReservation вызывается пользователем, не включаемым в группу Администраторы, вызов функции завершится ошибкой, и возвращается ERROR_ACCESS_DENIED . Эта функция также может завершиться ошибкой из-за контроля учетных записей (UAC) в Windows Vista и более поздних версиях. Если приложение, содержащее эту функцию, выполняется пользователем, вошедшего в систему как участник группы администраторов, отличный от встроенного администратора, этот вызов завершится ошибкой, если приложение не было отмечено в файле манифеста параметром requestedExecutionLevel , для которого задано значение requireAdministrator. Если в приложении отсутствует этот файл манифеста, пользователь, вошедший в группу администраторов, отличный от встроенного администратора, должен выполнять приложение в расширенной оболочке в качестве встроенного администратора (администратора запуска от имени) для успешного выполнения этой функции.
Примеры
В следующем примере удаляется постоянное резервирование TCP-порта.
Этот пример должен выполняться пользователем, который является членом группы администраторов. Самый простой способ запустить этот пример — в расширенной оболочке в качестве встроенного администратора (администратора запуска от имени).
#ifndef UNICODE
#define UNICODE
#endif
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#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",
status);
return 1;
}
wprintf(L"DeletePersistentTcpPortReservation call succeeded\n");
return 0;
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Целевая платформа | Windows |
Header | iphlpapi.h |
Библиотека | Iphlpapi.lib |
DLL | Iphlpapi.dll |
См. также раздел
CreatePersistentTcpPortReservation
CreatePersistentUdpPortReservation
DeletePersistentUdpPortReservation