diff --git a/Doc/library/signal.rst b/Doc/library/signal.rst
index 0f84537..74ff78d 100644
--- a/Doc/library/signal.rst
+++ b/Doc/library/signal.rst
@@ -236,6 +236,10 @@
    see the :ref:`description in the type hierarchy <frame-objects>` or see the
    attribute descriptions in the :mod:`inspect` module).
 
+   On Windows, :func:`signal` can only be called with :const:`SIGABRT`,
+   :const:`SIGFPE`, :const:`SIGILL`, :const:`SIGINT`, :const:`SIGSEGV`, or
+   :const:`SIGTERM`. A :exc:`ValueError` will be raised in any other case.
+
 
 .. _signal-example:
 
diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
index c9de8a4..1a99eef 100644
--- a/Lib/test/test_signal.py
+++ b/Lib/test/test_signal.py
@@ -9,7 +9,7 @@
 import traceback
 import sys, os, time, errno
 
-if sys.platform[:3] in ('win', 'os2') or sys.platform == 'riscos':
+if sys.platform == 'os2' or sys.platform == 'riscos':
     raise unittest.SkipTest("Can't test signal on %s" % \
                                    sys.platform)
 
@@ -37,6 +37,7 @@
         return None
 
 
+@unittest.skipIf(sys.platform == "win32", "Not valid on Windows")
 class InterProcessSignalTests(unittest.TestCase):
     MAX_DURATION = 20   # Entire test should last at most 20 sec.
 
@@ -186,6 +187,7 @@
                           self.MAX_DURATION)
 
 
+@unittest.skipIf(sys.platform == "win32", "Not valid on Windows")
 class BasicSignalTests(unittest.TestCase):
     def trivial_signal_handler(self, *args):
         pass
@@ -208,6 +210,23 @@
         self.assertEquals(signal.getsignal(signal.SIGHUP), hup)
 
 
+@unittest.skipUnless(sys.platform == "win32", "Windows specific")
+class WindowsSignalTests(unittest.TestCase):
+    def test_issue9324(self):
+        handler = lambda x, y: None
+        signal.signal(signal.SIGABRT, handler)
+        signal.signal(signal.SIGFPE, handler)
+        signal.signal(signal.SIGILL, handler)
+        signal.signal(signal.SIGINT, handler)
+        signal.signal(signal.SIGSEGV, handler)
+        signal.signal(signal.SIGTERM, handler)
+
+        with self.assertRaises(ValueError):
+            signal.signal(-1, handler)
+            sinal.signal(7, handler)
+
+
+@unittest.skipIf(sys.platform == "win32", "Not valid on Windows")
 class WakeupSignalTests(unittest.TestCase):
     TIMEOUT_FULL = 10
     TIMEOUT_HALF = 5
@@ -253,14 +272,15 @@
         os.close(self.write)
         signal.signal(signal.SIGALRM, self.alrm)
 
+@unittest.skipIf(sys.platform == "win32", "Not valid on Windows")
 class SiginterruptTest(unittest.TestCase):
-    signum = signal.SIGUSR1
 
     def setUp(self):
         """Install a no-op signal handler that can be set to allow
         interrupts or not, and arrange for the original signal handler to be
         re-installed when the test is finished.
         """
+        self.signum = signal.SIGUSR1
         oldhandler = signal.signal(self.signum, lambda x,y: None)
         self.addCleanup(signal.signal, self.signum, oldhandler)
 
@@ -354,7 +374,7 @@
         self.assertFalse(i)
 
 
-
+@unittest.skipIf(sys.platform == "win32", "Not valid on Windows")
 class ItimerTest(unittest.TestCase):
     def setUp(self):
         self.hndl_called = False
@@ -463,8 +483,11 @@
         self.assertEqual(self.hndl_called, True)
 
 def test_main():
-    test_support.run_unittest(BasicSignalTests, InterProcessSignalTests,
-        WakeupSignalTests, SiginterruptTest, ItimerTest)
+    if sys.platform == "win32":
+        support.run_unittest(WindowsSignalTests)
+    else:
+        support.run_unittest(BasicSignalTests, InterProcessSignalTests,
+            WakeupSignalTests, SiginterruptTest, ItimerTest)
 
 
 if __name__ == "__main__":
diff --git a/Misc/NEWS b/Misc/NEWS
index fd8c6bb..1d75aa9 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -144,6 +144,9 @@
 Extension Modules
 -----------------
 
+- Issue #9324: Add parameter validation to signal.signal on Windows in order
+  to prevent crashes.
+
 - Issue #9526: Remove some outdated (int) casts that were preventing
   the array module from working correctly with arrays of more than
   2**31 elements.
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index 9dc781d..8675978 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -255,8 +255,23 @@
     int sig_num;
     PyObject *old_handler;
     void (*func)(int);
+#ifdef MS_WINDOWS
+    int cur_sig, num_valid_sigs = 6;
+    static int valid_sigs[] = {SIGABRT, SIGFPE, SIGILL, SIGINT,
+                               SIGSEGV, SIGTERM};
+    BOOL valid_sig = FALSE;
+#endif
     if (!PyArg_ParseTuple(args, "iO:signal", &sig_num, &obj))
         return NULL;
+#ifdef MS_WINDOWS
+    /* Validate that sig_num is one of the allowable signals */
+    for (cur_sig = 0; cur_sig < num_valid_sigs; cur_sig++)
+        valid_sig |= (sig_num == valid_sigs[cur_sig]);
+    if (!valid_sig) {
+        PyErr_SetString(PyExc_ValueError, "signal number out of range");
+        return NULL;
+    }
+#endif
 #ifdef WITH_THREAD
     if (PyThread_get_thread_ident() != main_thread) {
         PyErr_SetString(PyExc_ValueError,
