Allow any object supporting the buffer protocol to be written as a binary object.
diff --git a/PC/_winreg.c b/PC/_winreg.c
index 84bf3c4..edfadac 100644
--- a/PC/_winreg.c
+++ b/PC/_winreg.c
@@ -830,19 +830,23 @@
 			if (value == Py_None)
 				*retDataSize = 0;
 			else {
-				if (!PyString_Check(value))
-					return 0;
-				*retDataSize = PyString_Size(value);
+				void *src_buf;
+				PyBufferProcs *pb = value->ob_type->tp_as_buffer;
+				if (pb==NULL) {
+					PyErr_Format(PyExc_TypeError, 
+						"Objects of type '%s' can not "
+						"be used as binary registry values", 
+						value->ob_type->tp_name);
+					return FALSE;
+				}
+				*retDataSize = (*pb->bf_getreadbuffer)(value, 0, &src_buf);
 				*retDataBuf = (BYTE *)PyMem_NEW(char,
 								*retDataSize);
 				if (*retDataBuf==NULL){
 					PyErr_NoMemory();
 					return FALSE;
 				}
-				memcpy(*retDataBuf,
-				       PyString_AS_STRING(
-				       		(PyStringObject *)value),
-				       *retDataSize);
+				memcpy(*retDataBuf, src_buf, *retDataSize);
 			}
 			break;
 	}