Check for PyUnicode_AS_UNICODE() failure
diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c
index d324ca9..6cf311f 100644
--- a/Modules/_ctypes/cfield.c
+++ b/Modules/_ctypes/cfield.c
@@ -1472,12 +1472,15 @@
     /* create a BSTR from value */
     if (value) {
         Py_ssize_t size = PyUnicode_GET_SIZE(value);
+        wchar_t* wvalue;
         if ((unsigned) size != size) {
             PyErr_SetString(PyExc_ValueError, "String too long for BSTR");
             return NULL;
         }
-        bstr = SysAllocStringLen(PyUnicode_AS_UNICODE(value),
-                                 (unsigned)size);
+        wvalue = PyUnicode_AsUnicode(value);
+        if (wvalue == NULL)
+            return NULL;
+        bstr = SysAllocStringLen(wvalue, (unsigned)size);
         Py_DECREF(value);
     } else
         bstr = NULL;
diff --git a/PC/_subprocess.c b/PC/_subprocess.c
index f0ad559..ec93d25 100644
--- a/PC/_subprocess.c
+++ b/PC/_subprocess.c
@@ -417,6 +417,7 @@
     PROCESS_INFORMATION pi;
     STARTUPINFOW si;
     PyObject* environment;
+    wchar_t *wenvironment;
 
     Py_UNICODE* application_name;
     Py_UNICODE* command_line;
@@ -461,6 +462,17 @@
             return NULL;
     }
 
+    if (environment) {
+        wenvironment = PyUnicode_AsUnicode(environment)
+        if (wenvironment == NULL)
+        {
+            Py_XDECREF(environment);
+            return NULL;
+        }
+    }
+    else
+        wenvironment = NULL;
+
     Py_BEGIN_ALLOW_THREADS
     result = CreateProcessW(application_name,
                            command_line,
@@ -468,7 +480,7 @@
                            NULL,
                            inherit_handles,
                            creation_flags | CREATE_UNICODE_ENVIRONMENT,
-                           environment ? PyUnicode_AS_UNICODE(environment) : NULL,
+                           wenvironment,
                            current_directory,
                            &si,
                            &pi);
diff --git a/PC/import_nt.c b/PC/import_nt.c
index 3b60718..dfbf054 100644
--- a/PC/import_nt.c
+++ b/PC/import_nt.c
@@ -35,6 +35,7 @@
     wchar_t pathBuf[MAXPATHLEN+1];
     int pathLen = MAXPATHLEN+1;
     PyObject *path, *moduleKey, *suffix;
+    wchar_t *wmoduleKey, *wsuffix;
     struct filedescr *fdp;
     HKEY keyBase;
     int modNameSize;
@@ -52,17 +53,22 @@
         PyWin_DLLVersionString, moduleName);
     if (moduleKey == NULL)
         return NULL;
+    wmoduleKey = PyUnicode_AsUnicode(moduleKey);
+    if (wmoduleKey == NULL) {
+        Py_DECREF(moduleKey);
+        return NULL;
+    }
 
     keyBase = HKEY_CURRENT_USER;
     modNameSize = pathLen;
-    regStat = RegQueryValueW(keyBase, PyUnicode_AS_UNICODE(moduleKey),
+    regStat = RegQueryValueW(keyBase, wmoduleKey,
                              pathBuf, &modNameSize);
     if (regStat != ERROR_SUCCESS) {
         /* No user setting - lookup in machine settings */
         keyBase = HKEY_LOCAL_MACHINE;
         /* be anal - failure may have reset size param */
         modNameSize = pathLen;
-        regStat = RegQueryValueW(keyBase, PyUnicode_AS_UNICODE(moduleKey),
+        regStat = RegQueryValueW(keyBase, wmoduleKey,
                                  pathBuf, &modNameSize);
         if (regStat != ERROR_SUCCESS) {
             Py_DECREF(moduleKey);
@@ -80,10 +86,15 @@
         suffix = PyUnicode_FromString(fdp->suffix);
         if (suffix == NULL)
             return NULL;
+        wsuffix = PyUnicode_AsUnicode(suffix);
+        if (wsuffix == NULL) {
+            Py_DECREF(suffix);
+            return NULL;
+        }
         extLen = PyUnicode_GET_SIZE(suffix);
         if ((Py_ssize_t)modNameSize > extLen &&
             _wcsnicmp(pathBuf + ((Py_ssize_t)modNameSize-extLen-1),
-                      PyUnicode_AS_UNICODE(suffix),
+                      wsuffix,
                       extLen) == 0)
         {
             Py_DECREF(suffix);
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
index c620e58..e511098 100644
--- a/Python/dynload_win.c
+++ b/Python/dynload_win.c
@@ -176,11 +176,16 @@
 {
     dl_funcptr p;
     char funcname[258], *import_python;
+    wchar_t *wpathname;
 
 #ifndef _DEBUG
     _Py_CheckPython3();
 #endif
 
+    wpathname = PyUnicode_AsUnicode(pathname);
+    if (wpathname == NULL)
+        return NULL;
+
     PyOS_snprintf(funcname, sizeof(funcname), "PyInit_%.200s", shortname);
 
     {
@@ -195,7 +200,7 @@
         /* We use LoadLibraryEx so Windows looks for dependent DLLs
             in directory of pathname first. */
         /* XXX This call doesn't exist in Windows CE */
-        hDLL = LoadLibraryExW(PyUnicode_AS_UNICODE(pathname), NULL,
+        hDLL = LoadLibraryExW(wpathname, NULL,
                               LOAD_WITH_ALTERED_SEARCH_PATH);
         _Py_DeactivateActCtx(cookie);