diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5d178f90137..ab169d9afd3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2280,6 +2280,7 @@ add_library(grpc
src/core/lib/event_engine/utils.cc
src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc
src/core/lib/event_engine/windows/iocp.cc
+ src/core/lib/event_engine/windows/native_windows_dns_resolver.cc
src/core/lib/event_engine/windows/win_socket.cc
src/core/lib/event_engine/windows/windows_endpoint.cc
src/core/lib/event_engine/windows/windows_engine.cc
@@ -3011,6 +3012,7 @@ add_library(grpc_unsecure
src/core/lib/event_engine/utils.cc
src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc
src/core/lib/event_engine/windows/iocp.cc
+ src/core/lib/event_engine/windows/native_windows_dns_resolver.cc
src/core/lib/event_engine/windows/win_socket.cc
src/core/lib/event_engine/windows/windows_endpoint.cc
src/core/lib/event_engine/windows/windows_engine.cc
@@ -5000,6 +5002,7 @@ add_library(grpc_authorization_provider
src/core/lib/event_engine/utils.cc
src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc
src/core/lib/event_engine/windows/iocp.cc
+ src/core/lib/event_engine/windows/native_windows_dns_resolver.cc
src/core/lib/event_engine/windows/win_socket.cc
src/core/lib/event_engine/windows/windows_endpoint.cc
src/core/lib/event_engine/windows/windows_engine.cc
@@ -24761,6 +24764,7 @@ add_executable(test_core_transport_chaotic_good_frame_test
src/core/lib/event_engine/utils.cc
src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc
src/core/lib/event_engine/windows/iocp.cc
+ src/core/lib/event_engine/windows/native_windows_dns_resolver.cc
src/core/lib/event_engine/windows/win_socket.cc
src/core/lib/event_engine/windows/windows_endpoint.cc
src/core/lib/event_engine/windows/windows_engine.cc
diff --git a/Makefile b/Makefile
index 0071fee977c..b7224ba266b 100644
--- a/Makefile
+++ b/Makefile
@@ -1480,6 +1480,7 @@ LIBGRPC_SRC = \
src/core/lib/event_engine/utils.cc \
src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc \
src/core/lib/event_engine/windows/iocp.cc \
+ src/core/lib/event_engine/windows/native_windows_dns_resolver.cc \
src/core/lib/event_engine/windows/win_socket.cc \
src/core/lib/event_engine/windows/windows_endpoint.cc \
src/core/lib/event_engine/windows/windows_engine.cc \
@@ -2061,6 +2062,7 @@ LIBGRPC_UNSECURE_SRC = \
src/core/lib/event_engine/utils.cc \
src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc \
src/core/lib/event_engine/windows/iocp.cc \
+ src/core/lib/event_engine/windows/native_windows_dns_resolver.cc \
src/core/lib/event_engine/windows/win_socket.cc \
src/core/lib/event_engine/windows/windows_endpoint.cc \
src/core/lib/event_engine/windows/windows_engine.cc \
diff --git a/Package.swift b/Package.swift
index 1f8a60eb738..06646df8e87 100644
--- a/Package.swift
+++ b/Package.swift
@@ -1341,6 +1341,8 @@ let package = Package(
"src/core/lib/event_engine/windows/grpc_polled_fd_windows.h",
"src/core/lib/event_engine/windows/iocp.cc",
"src/core/lib/event_engine/windows/iocp.h",
+ "src/core/lib/event_engine/windows/native_windows_dns_resolver.cc",
+ "src/core/lib/event_engine/windows/native_windows_dns_resolver.h",
"src/core/lib/event_engine/windows/win_socket.cc",
"src/core/lib/event_engine/windows/win_socket.h",
"src/core/lib/event_engine/windows/windows_endpoint.cc",
diff --git a/build_autogenerated.yaml b/build_autogenerated.yaml
index 46cd87ce1d7..92437f0ce8a 100644
--- a/build_autogenerated.yaml
+++ b/build_autogenerated.yaml
@@ -911,6 +911,7 @@ libs:
- src/core/lib/event_engine/utils.h
- src/core/lib/event_engine/windows/grpc_polled_fd_windows.h
- src/core/lib/event_engine/windows/iocp.h
+ - src/core/lib/event_engine/windows/native_windows_dns_resolver.h
- src/core/lib/event_engine/windows/win_socket.h
- src/core/lib/event_engine/windows/windows_endpoint.h
- src/core/lib/event_engine/windows/windows_engine.h
@@ -1739,6 +1740,7 @@ libs:
- src/core/lib/event_engine/utils.cc
- src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc
- src/core/lib/event_engine/windows/iocp.cc
+ - src/core/lib/event_engine/windows/native_windows_dns_resolver.cc
- src/core/lib/event_engine/windows/win_socket.cc
- src/core/lib/event_engine/windows/windows_endpoint.cc
- src/core/lib/event_engine/windows/windows_engine.cc
@@ -2376,6 +2378,7 @@ libs:
- src/core/lib/event_engine/utils.h
- src/core/lib/event_engine/windows/grpc_polled_fd_windows.h
- src/core/lib/event_engine/windows/iocp.h
+ - src/core/lib/event_engine/windows/native_windows_dns_resolver.h
- src/core/lib/event_engine/windows/win_socket.h
- src/core/lib/event_engine/windows/windows_endpoint.h
- src/core/lib/event_engine/windows/windows_engine.h
@@ -2827,6 +2830,7 @@ libs:
- src/core/lib/event_engine/utils.cc
- src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc
- src/core/lib/event_engine/windows/iocp.cc
+ - src/core/lib/event_engine/windows/native_windows_dns_resolver.cc
- src/core/lib/event_engine/windows/win_socket.cc
- src/core/lib/event_engine/windows/windows_endpoint.cc
- src/core/lib/event_engine/windows/windows_engine.cc
@@ -4518,6 +4522,7 @@ libs:
- src/core/lib/event_engine/utils.h
- src/core/lib/event_engine/windows/grpc_polled_fd_windows.h
- src/core/lib/event_engine/windows/iocp.h
+ - src/core/lib/event_engine/windows/native_windows_dns_resolver.h
- src/core/lib/event_engine/windows/win_socket.h
- src/core/lib/event_engine/windows/windows_endpoint.h
- src/core/lib/event_engine/windows/windows_engine.h
@@ -4875,6 +4880,7 @@ libs:
- src/core/lib/event_engine/utils.cc
- src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc
- src/core/lib/event_engine/windows/iocp.cc
+ - src/core/lib/event_engine/windows/native_windows_dns_resolver.cc
- src/core/lib/event_engine/windows/win_socket.cc
- src/core/lib/event_engine/windows/windows_endpoint.cc
- src/core/lib/event_engine/windows/windows_engine.cc
@@ -16924,6 +16930,7 @@ targets:
- src/core/lib/event_engine/utils.h
- src/core/lib/event_engine/windows/grpc_polled_fd_windows.h
- src/core/lib/event_engine/windows/iocp.h
+ - src/core/lib/event_engine/windows/native_windows_dns_resolver.h
- src/core/lib/event_engine/windows/win_socket.h
- src/core/lib/event_engine/windows/windows_endpoint.h
- src/core/lib/event_engine/windows/windows_engine.h
@@ -17262,6 +17269,7 @@ targets:
- src/core/lib/event_engine/utils.cc
- src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc
- src/core/lib/event_engine/windows/iocp.cc
+ - src/core/lib/event_engine/windows/native_windows_dns_resolver.cc
- src/core/lib/event_engine/windows/win_socket.cc
- src/core/lib/event_engine/windows/windows_endpoint.cc
- src/core/lib/event_engine/windows/windows_engine.cc
diff --git a/config.m4 b/config.m4
index 34b99719662..74d0f802315 100644
--- a/config.m4
+++ b/config.m4
@@ -570,6 +570,7 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/event_engine/utils.cc \
src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc \
src/core/lib/event_engine/windows/iocp.cc \
+ src/core/lib/event_engine/windows/native_windows_dns_resolver.cc \
src/core/lib/event_engine/windows/win_socket.cc \
src/core/lib/event_engine/windows/windows_endpoint.cc \
src/core/lib/event_engine/windows/windows_engine.cc \
diff --git a/config.w32 b/config.w32
index d7678fff5ac..afc9589aed3 100644
--- a/config.w32
+++ b/config.w32
@@ -535,6 +535,7 @@ if (PHP_GRPC != "no") {
"src\\core\\lib\\event_engine\\utils.cc " +
"src\\core\\lib\\event_engine\\windows\\grpc_polled_fd_windows.cc " +
"src\\core\\lib\\event_engine\\windows\\iocp.cc " +
+ "src\\core\\lib\\event_engine\\windows\\native_windows_dns_resolver.cc " +
"src\\core\\lib\\event_engine\\windows\\win_socket.cc " +
"src\\core\\lib\\event_engine\\windows\\windows_endpoint.cc " +
"src\\core\\lib\\event_engine\\windows\\windows_engine.cc " +
diff --git a/gRPC-C++.podspec b/gRPC-C++.podspec
index ff49bb43910..0c39f744fb0 100644
--- a/gRPC-C++.podspec
+++ b/gRPC-C++.podspec
@@ -984,6 +984,7 @@ Pod::Spec.new do |s|
'src/core/lib/event_engine/utils.h',
'src/core/lib/event_engine/windows/grpc_polled_fd_windows.h',
'src/core/lib/event_engine/windows/iocp.h',
+ 'src/core/lib/event_engine/windows/native_windows_dns_resolver.h',
'src/core/lib/event_engine/windows/win_socket.h',
'src/core/lib/event_engine/windows/windows_endpoint.h',
'src/core/lib/event_engine/windows/windows_engine.h',
@@ -2225,6 +2226,7 @@ Pod::Spec.new do |s|
'src/core/lib/event_engine/utils.h',
'src/core/lib/event_engine/windows/grpc_polled_fd_windows.h',
'src/core/lib/event_engine/windows/iocp.h',
+ 'src/core/lib/event_engine/windows/native_windows_dns_resolver.h',
'src/core/lib/event_engine/windows/win_socket.h',
'src/core/lib/event_engine/windows/windows_endpoint.h',
'src/core/lib/event_engine/windows/windows_engine.h',
diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec
index bebce4fc733..a700bdbec44 100644
--- a/gRPC-Core.podspec
+++ b/gRPC-Core.podspec
@@ -1444,6 +1444,8 @@ Pod::Spec.new do |s|
'src/core/lib/event_engine/windows/grpc_polled_fd_windows.h',
'src/core/lib/event_engine/windows/iocp.cc',
'src/core/lib/event_engine/windows/iocp.h',
+ 'src/core/lib/event_engine/windows/native_windows_dns_resolver.cc',
+ 'src/core/lib/event_engine/windows/native_windows_dns_resolver.h',
'src/core/lib/event_engine/windows/win_socket.cc',
'src/core/lib/event_engine/windows/win_socket.h',
'src/core/lib/event_engine/windows/windows_endpoint.cc',
@@ -2991,6 +2993,7 @@ Pod::Spec.new do |s|
'src/core/lib/event_engine/utils.h',
'src/core/lib/event_engine/windows/grpc_polled_fd_windows.h',
'src/core/lib/event_engine/windows/iocp.h',
+ 'src/core/lib/event_engine/windows/native_windows_dns_resolver.h',
'src/core/lib/event_engine/windows/win_socket.h',
'src/core/lib/event_engine/windows/windows_endpoint.h',
'src/core/lib/event_engine/windows/windows_engine.h',
diff --git a/grpc.gemspec b/grpc.gemspec
index 4a2e017e484..bfd2ac83bca 100644
--- a/grpc.gemspec
+++ b/grpc.gemspec
@@ -1347,6 +1347,8 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/event_engine/windows/grpc_polled_fd_windows.h )
s.files += %w( src/core/lib/event_engine/windows/iocp.cc )
s.files += %w( src/core/lib/event_engine/windows/iocp.h )
+ s.files += %w( src/core/lib/event_engine/windows/native_windows_dns_resolver.cc )
+ s.files += %w( src/core/lib/event_engine/windows/native_windows_dns_resolver.h )
s.files += %w( src/core/lib/event_engine/windows/win_socket.cc )
s.files += %w( src/core/lib/event_engine/windows/win_socket.h )
s.files += %w( src/core/lib/event_engine/windows/windows_endpoint.cc )
diff --git a/grpc.gyp b/grpc.gyp
index 3a5ba2d57d0..1a33c9eb586 100644
--- a/grpc.gyp
+++ b/grpc.gyp
@@ -799,6 +799,7 @@
'src/core/lib/event_engine/utils.cc',
'src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc',
'src/core/lib/event_engine/windows/iocp.cc',
+ 'src/core/lib/event_engine/windows/native_windows_dns_resolver.cc',
'src/core/lib/event_engine/windows/win_socket.cc',
'src/core/lib/event_engine/windows/windows_endpoint.cc',
'src/core/lib/event_engine/windows/windows_engine.cc',
@@ -1321,6 +1322,7 @@
'src/core/lib/event_engine/utils.cc',
'src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc',
'src/core/lib/event_engine/windows/iocp.cc',
+ 'src/core/lib/event_engine/windows/native_windows_dns_resolver.cc',
'src/core/lib/event_engine/windows/win_socket.cc',
'src/core/lib/event_engine/windows/windows_endpoint.cc',
'src/core/lib/event_engine/windows/windows_engine.cc',
@@ -2100,6 +2102,7 @@
'src/core/lib/event_engine/utils.cc',
'src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc',
'src/core/lib/event_engine/windows/iocp.cc',
+ 'src/core/lib/event_engine/windows/native_windows_dns_resolver.cc',
'src/core/lib/event_engine/windows/win_socket.cc',
'src/core/lib/event_engine/windows/windows_endpoint.cc',
'src/core/lib/event_engine/windows/windows_engine.cc',
diff --git a/package.xml b/package.xml
index 67d5577eff9..885bedac415 100644
--- a/package.xml
+++ b/package.xml
@@ -1329,6 +1329,8 @@
+
+
diff --git a/src/core/BUILD b/src/core/BUILD
index 776a390ff0d..37a65c4b32b 100644
--- a/src/core/BUILD
+++ b/src/core/BUILD
@@ -2222,6 +2222,20 @@ grpc_cc_library(
"windows_endpoint",
"windows_event_engine_listener",
"windows_iocp",
+ "windows_native_resolver",
+ "//:event_engine_base_hdrs",
+ "//:gpr",
+ ],
+)
+
+grpc_cc_library(
+ name = "windows_native_resolver",
+ srcs = ["lib/event_engine/windows/native_windows_dns_resolver.cc"],
+ hdrs = ["lib/event_engine/windows/native_windows_dns_resolver.h"],
+ external_deps = ["absl/strings:str_format"],
+ deps = [
+ "error",
+ "status_helper",
"//:event_engine_base_hdrs",
"//:gpr",
],
diff --git a/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc b/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc
new file mode 100644
index 00000000000..a00ed40225b
--- /dev/null
+++ b/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc
@@ -0,0 +1,114 @@
+// Copyright 2024 The gRPC Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+#include
+
+#ifdef GPR_WINDOWS
+#include
+#include
+#include
+
+#include
+
+#include "absl/strings/str_format.h"
+
+#include
+
+#include "src/core/lib/event_engine/windows/native_windows_dns_resolver.h"
+#include "src/core/lib/gprpp/host_port.h"
+#include "src/core/lib/gprpp/status_helper.h"
+#include "src/core/lib/iomgr/error.h"
+
+namespace grpc_event_engine {
+namespace experimental {
+
+namespace {
+absl::StatusOr>
+LookupHostnameBlocking(absl::string_view name, absl::string_view default_port) {
+ std::vector addresses;
+ // parse name, splitting it into host and port parts
+ std::string host;
+ std::string port;
+ grpc_core::SplitHostPort(name, &host, &port);
+ if (host.empty()) {
+ return absl::InvalidArgumentError(absl::StrCat("Unparseable name: ", name));
+ }
+ if (port.empty()) {
+ if (default_port.empty()) {
+ return absl::InvalidArgumentError(
+ absl::StrFormat("No port in name %s or default_port argument", name));
+ }
+ port = std::string(default_port);
+ }
+ // Call getaddrinfo
+ struct addrinfo hints;
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_UNSPEC; // ipv4 or ipv6
+ hints.ai_socktype = SOCK_STREAM; // stream socket
+ hints.ai_flags = AI_PASSIVE; // for wildcard IP address
+ struct addrinfo* result = nullptr;
+ int getaddrinfo_error =
+ getaddrinfo(host.c_str(), port.c_str(), &hints, &result);
+ if (getaddrinfo_error != 0) {
+ return absl::UnknownError(
+ absl::StrFormat("Address lookup failed for %s os_error: %s", name,
+ grpc_core::StatusToString(
+ GRPC_WSA_ERROR(WSAGetLastError(), "getaddrinfo"))
+ .c_str()));
+ }
+ // Success path: collect and return all addresses
+ for (auto* resp = result; resp != nullptr; resp = resp->ai_next) {
+ addresses.emplace_back(resp->ai_addr, resp->ai_addrlen);
+ }
+ if (result) freeaddrinfo(result);
+ return addresses;
+}
+
+} // namespace
+NativeWindowsDNSResolver::NativeWindowsDNSResolver(
+ std::shared_ptr event_engine)
+ : event_engine_(std::move(event_engine)) {}
+
+void NativeWindowsDNSResolver::LookupHostname(
+ EventEngine::DNSResolver::LookupHostnameCallback on_resolved,
+ absl::string_view name, absl::string_view default_port) {
+ event_engine_->Run(
+ [name, default_port, on_resolved = std::move(on_resolved)]() mutable {
+ on_resolved(LookupHostnameBlocking(name, default_port));
+ });
+}
+
+void NativeWindowsDNSResolver::LookupSRV(
+ EventEngine::DNSResolver::LookupSRVCallback on_resolved,
+ absl::string_view /* name */) {
+ // Not supported
+ event_engine_->Run([on_resolved = std::move(on_resolved)]() mutable {
+ on_resolved(absl::UnimplementedError(
+ "The Native resolver does not support looking up SRV records"));
+ });
+}
+
+void NativeWindowsDNSResolver::LookupTXT(
+ EventEngine::DNSResolver::LookupTXTCallback on_resolved,
+ absl::string_view /* name */) {
+ // Not supported
+ event_engine_->Run([on_resolved = std::move(on_resolved)]() mutable {
+ on_resolved(absl::UnimplementedError(
+ "The Native resolver does not support looking up TXT records"));
+ });
+}
+
+} // namespace experimental
+} // namespace grpc_event_engine
+
+#endif // GPR_WINDOWS
diff --git a/src/core/lib/event_engine/windows/native_windows_dns_resolver.h b/src/core/lib/event_engine/windows/native_windows_dns_resolver.h
new file mode 100644
index 00000000000..43d1fe27fcc
--- /dev/null
+++ b/src/core/lib/event_engine/windows/native_windows_dns_resolver.h
@@ -0,0 +1,51 @@
+// Copyright 2024 The gRPC Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+#ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_WINDOWS_NATIVE_WINDOWS_DNS_RESOLVER_H
+#define GRPC_SRC_CORE_LIB_EVENT_ENGINE_WINDOWS_NATIVE_WINDOWS_DNS_RESOLVER_H
+
+#include
+
+#ifdef GPR_WINDOWS
+
+#include
+
+namespace grpc_event_engine {
+namespace experimental {
+
+// An asynchronous DNS resolver which uses the native platform's getaddrinfo
+// API. Only supports A/AAAA records.
+class NativeWindowsDNSResolver : public EventEngine::DNSResolver {
+ public:
+ explicit NativeWindowsDNSResolver(std::shared_ptr event_engine);
+
+ void LookupHostname(
+ EventEngine::DNSResolver::LookupHostnameCallback on_resolved,
+ absl::string_view name, absl::string_view default_port) override;
+
+ void LookupSRV(EventEngine::DNSResolver::LookupSRVCallback on_resolved,
+ absl::string_view name) override;
+
+ void LookupTXT(EventEngine::DNSResolver::LookupTXTCallback on_resolved,
+ absl::string_view name) override;
+
+ private:
+ std::shared_ptr event_engine_;
+};
+
+} // namespace experimental
+} // namespace grpc_event_engine
+
+#endif
+
+#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_WINDOWS_NATIVE_WINDOWS_DNS_RESOLVER_H
diff --git a/src/core/lib/event_engine/windows/windows_engine.cc b/src/core/lib/event_engine/windows/windows_engine.cc
index 25120267039..69e4963f387 100644
--- a/src/core/lib/event_engine/windows/windows_engine.cc
+++ b/src/core/lib/event_engine/windows/windows_engine.cc
@@ -37,6 +37,7 @@
#include "src/core/lib/event_engine/utils.h"
#include "src/core/lib/event_engine/windows/grpc_polled_fd_windows.h"
#include "src/core/lib/event_engine/windows/iocp.h"
+#include "src/core/lib/event_engine/windows/native_windows_dns_resolver.h"
#include "src/core/lib/event_engine/windows/windows_endpoint.h"
#include "src/core/lib/event_engine/windows/windows_engine.h"
#include "src/core/lib/event_engine/windows/windows_listener.h"
@@ -233,10 +234,9 @@ WindowsEventEngine::GetDNSResolver(
return std::make_unique(
std::move(*ares_resolver));
#else // GRPC_ARES == 1 && defined(GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER)
- // TODO(yijiem): Implement a basic A/AAAA-only native resolver in
- // WindowsEventEngine.
- (void)options;
- grpc_core::Crash("unimplemented");
+ GRPC_EVENT_ENGINE_DNS_TRACE(
+ "WindowsEventEngine:%p creating NativeWindowsDNSResolver", this);
+ return std::make_unique(shared_from_this());
#endif // GRPC_ARES == 1 && defined(GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER)
}
diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py
index 351065b21a8..30a62ced196 100644
--- a/src/python/grpcio/grpc_core_dependencies.py
+++ b/src/python/grpcio/grpc_core_dependencies.py
@@ -544,6 +544,7 @@ CORE_SOURCE_FILES = [
'src/core/lib/event_engine/utils.cc',
'src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc',
'src/core/lib/event_engine/windows/iocp.cc',
+ 'src/core/lib/event_engine/windows/native_windows_dns_resolver.cc',
'src/core/lib/event_engine/windows/win_socket.cc',
'src/core/lib/event_engine/windows/windows_endpoint.cc',
'src/core/lib/event_engine/windows/windows_engine.cc',
diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal
index c0fc6f9e749..168ddf984d8 100644
--- a/tools/doxygen/Doxyfile.c++.internal
+++ b/tools/doxygen/Doxyfile.c++.internal
@@ -2346,6 +2346,8 @@ src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc \
src/core/lib/event_engine/windows/grpc_polled_fd_windows.h \
src/core/lib/event_engine/windows/iocp.cc \
src/core/lib/event_engine/windows/iocp.h \
+src/core/lib/event_engine/windows/native_windows_dns_resolver.cc \
+src/core/lib/event_engine/windows/native_windows_dns_resolver.h \
src/core/lib/event_engine/windows/win_socket.cc \
src/core/lib/event_engine/windows/win_socket.h \
src/core/lib/event_engine/windows/windows_endpoint.cc \
diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal
index 1645a7c7c9a..8b439b3ac66 100644
--- a/tools/doxygen/Doxyfile.core.internal
+++ b/tools/doxygen/Doxyfile.core.internal
@@ -2122,6 +2122,8 @@ src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc \
src/core/lib/event_engine/windows/grpc_polled_fd_windows.h \
src/core/lib/event_engine/windows/iocp.cc \
src/core/lib/event_engine/windows/iocp.h \
+src/core/lib/event_engine/windows/native_windows_dns_resolver.cc \
+src/core/lib/event_engine/windows/native_windows_dns_resolver.h \
src/core/lib/event_engine/windows/win_socket.cc \
src/core/lib/event_engine/windows/win_socket.h \
src/core/lib/event_engine/windows/windows_endpoint.cc \