Retrieves the current DNS configuration.
Syntax
DWORD DnsQueryConfig(
DnsConfigLabel label,
ULONG ulOption,
PVOID pBuffer,
ULONG cbBuffer,
ULONG *pcbBytesReturned
);
DnsConfigLabel label,
ULONG ulOption,
PVOID pBuffer,
ULONG cbBuffer,
ULONG *pcbBytesReturned
);
Parameters
| Parameter | Description |
|---|---|
label |
A DNS configuration label that specifies the DNS configuration setting to retrieve. |
ulOption |
Reserved. Must be 0. |
pBuffer |
A pointer to a buffer that receives the DNS configuration data. The format of the data depends on the value of the label parameter. |
cbBuffer |
The size, in bytes, of the buffer pointed to by pBuffer. |
pcbBytesReturned |
A pointer to a ULONG value that receives the number of bytes returned in pBuffer. |
Return Value
If the function succeeds, the return value is a non-zero value that indicates success. If the function fails, the return value is the zero value that indicates failure. To get extended error information, call GetLastError.
| Return Value | Description |
|---|---|
| A non-zero value | Success. |
0 |
Failure. Call GetLastError for more information. |
Remarks
The DnsQueryConfig function retrieves specific DNS configuration settings from the system.
The label parameter determines which configuration setting is retrieved. The following are common values for DnsConfigLabel:
DnsConfigLabel Enumeration (Conceptual Example)
Note: This is a conceptual representation of possible labels. Actual enumeration values are defined in SDK headers.
typedef enum _DnsConfigLabel {
DnsConfigLabelUnknown = 0,
DnsConfigLabelPrimaryDomainName = 1,
DnsConfigLabelDomainName = 2,
DnsConfigLabelHostname = 3,
DnsConfigLabelSearchList = 4,
DnsConfigLabelAdapterServerList = 5,
DnsConfigLabelServerList = 6,
DnsConfigLabelIpAddress = 7,
DnsConfigLabelMaxLabels = 8
} DnsConfigLabel;
For example, to retrieve the DNS server list, you would set label to DnsConfigLabelServerList.
Important: Ensure that the buffer size specified by
cbBuffer is sufficient to hold the requested configuration data. If the buffer is too small, the function will fail, and GetLastError can be used to determine the required buffer size (often returned in pcbBytesReturned).
Example
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")
// Define DnsConfigLabel if not available in headers (for demonstration)
typedef enum _DnsConfigLabel {
DnsConfigLabelUnknown = 0,
DnsConfigLabelPrimaryDomainName,
DnsConfigLabelDomainName,
DnsConfigLabelHostname,
DnsConfigLabelSearchList,
DnsConfigLabelAdapterServerList,
DnsConfigLabelServerList,
DnsConfigLabelIpAddress,
DnsConfigLabelMaxLabels
} DnsConfigLabel;
int main() {
DWORD dwRetVal = 0;
ULONG flags = 0;
ULONG bytesReturned = 0;
ULONG bufferSize = 1024; // Initial buffer size
char* dnsServerList = NULL;
// Allocate memory for the DNS server list
dnsServerList = (char*)malloc(bufferSize);
if (dnsServerList == NULL) {
fprintf(stderr, "Error allocating memory.\n");
return 1;
}
// Query for the DNS server list
dwRetVal = DnsQueryConfig(
DnsConfigLabelServerList,
flags,
dnsServerList,
bufferSize,
&bytesReturned
);
if (dwRetVal != 0) {
// If buffer was too small, reallocate and try again
if (dwRetVal == ERROR_INSUFFICIENT_BUFFER) {
bufferSize = bytesReturned;
dnsServerList = (char*)realloc(dnsServerList, bufferSize);
if (dnsServerList == NULL) {
fprintf(stderr, "Error reallocating memory.\n");
return 1;
}
dwRetVal = DnsQueryConfig(
DnsConfigLabelServerList,
flags,
dnsServerList,
bufferSize,
&bytesReturned
);
if (dwRetVal != 0) {
fprintf(stderr, "DnsQueryConfig failed with error: %lu\n", GetLastError());
free(dnsServerList);
return 1;
}
} else {
fprintf(stderr, "DnsQueryConfig failed with error: %lu\n", GetLastError());
free(dnsServerList);
return 1;
}
}
// Process the returned DNS server list
printf("DNS Server List:\n");
char* currentServer = dnsServerList;
while (*currentServer != '\0') {
printf(" %s\n", currentServer);
currentServer += strlen(currentServer) + 1; // Move to the next null terminator
}
free(dnsServerList);
return 0;
}
Requirements
| Component | Version |
|---|---|
| Minimum supported client | Windows 2000 Professional |
| Minimum supported server | Windows 2000 Server |
| Header | iphlpapi.h (include winsock2.h) |
| Library | Iphlpapi.lib |
| DLL | Iphlpapi.dll |