diff --git a/src/core/support/cpu_windows.c b/src/core/support/cpu_windows.c
index cb454ccd3beed4f732f484b2f0a8088e89d8a7fb..4f7103d28289d682f054c54c88b8d0aa1818a18d 100644
--- a/src/core/support/cpu_windows.c
+++ b/src/core/support/cpu_windows.c
@@ -34,19 +34,17 @@
 #include <grpc/support/port_platform.h>
 
 #ifdef GPR_WIN32
-
+#include <Windows.h>
 #include <grpc/support/log.h>
 
 unsigned gpr_cpu_num_cores(void) {
-  /* TODO(jtattermusch): implement */
-  gpr_log(GPR_ERROR, "Cannot determine number of CPUs: assuming 1");
-  return 1;
+  SYSTEM_INFO si;
+  GetSystemInfo(&si);
+  return si.dwNumberOfProcessors;
 }
 
 unsigned gpr_cpu_current_cpu(void) {
-  /* TODO(jtattermusch): implement */
-  gpr_log(GPR_ERROR, "Cannot determine current CPU");
-  return 0;
+  return GetCurrentProcessorNumber();
 }
 
 #endif /* GPR_WIN32 */