[pywin32-checkins] pywin32/win32/src win32apimodule.cpp,1.81,1.82
OLD project page for the Python extensions for Windows
Brought to you by:
mhammond
From: Roger U. <ru...@us...> - 2008-02-07 03:27:32
|
Update of /cvsroot/pywin32/pywin32/win32/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5942 Modified Files: win32apimodule.cpp Log Message: Add RegDeleteKeyEx (combined with RegDeleteKeyTransacted) Index: win32apimodule.cpp =================================================================== RCS file: /cvsroot/pywin32/pywin32/win32/src/win32apimodule.cpp,v retrieving revision 1.81 retrieving revision 1.82 diff -C2 -d -r1.81 -r1.82 *** win32apimodule.cpp 7 Feb 2008 00:05:34 -0000 1.81 --- win32apimodule.cpp 7 Feb 2008 03:27:36 -0000 1.82 *************** *** 71,74 **** --- 71,76 ---- REGSAM,LPSECURITY_ATTRIBUTES,PHKEY,LPDWORD,HANDLE,PVOID); static RegCreateKeyTransactedfunc pfnRegCreateKeyTransacted=NULL; + typedef LONG (WINAPI *RegDeleteKeyExfunc)(HKEY,LPWSTR,REGSAM,DWORD); + static RegDeleteKeyExfunc pfnRegDeleteKeyEx = NULL; typedef LONG (WINAPI *RegDeleteKeyTransactedfunc)(HKEY,LPWSTR,REGSAM,DWORD,HANDLE,PVOID); static RegDeleteKeyTransactedfunc pfnRegDeleteKeyTransacted = NULL; *************** *** 3005,3017 **** } ! // @pymethod |win32api|RegDeleteKeyTransacted|Deletes a registry key as part of a transaction // @comm Accepts keyword args. ! // @comm Requires Vista or later. // @comm Key to be deleted cannot contain subkeys ! static PyObject *PyRegDeleteKeyTransacted(PyObject *self, PyObject *args, PyObject *kwargs) { - CHECK_PFN(RegDeleteKeyTransacted); HKEY hKey; ! PyObject *obKey, *obsubKey, *obtrans, *ret=NULL; PVOID extparam=NULL; // Reserved, ignore for now WCHAR *subKey=NULL; --- 3007,3021 ---- } ! // @pymethod |win32api|RegDeleteKeyEx|Deletes a registry key from 32 or 64 bit registry view ! // @pyseeapi RegDeleteKeyEx // @comm Accepts keyword args. ! // @comm Requires 64-bit XP, Vista, or later. // @comm Key to be deleted cannot contain subkeys ! // @comm If a transaction handle is specified, RegDeleteKeyTransacted is called ! // @pyseeapi RegDeleteKeyTransacted ! static PyObject *PyRegDeleteKeyEx(PyObject *self, PyObject *args, PyObject *kwargs) { HKEY hKey; ! PyObject *obKey, *obsubKey, *obtrans=Py_None, *ret=NULL; PVOID extparam=NULL; // Reserved, ignore for now WCHAR *subKey=NULL; *************** *** 3020,3037 **** HANDLE htrans; long rc; ! static char *keywords[]={"Key","SubKey","Transaction","samDesired", NULL}; ! if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOO|k:RegDeleteKeyTransacted", keywords, &obKey, // @pyparm <o PyHKEY>/int|Key||Registry key or one of win32con.HKEY_* values &obsubKey, // @pyparm <o PyUnicode>|SubKey||Name of subkey to be deleted. ! &obtrans, // @pyparm <o PyHANDLE>|Transaction||Handle to a transaction as returned by <om win32transaction.CreateTransaction> ! &access)) // @pyparm int|samDesired|0|Can be KEY_WOW64_32KEY or KEY_WOW64_64KEY to specify alternate registry view return NULL; if (PyWinObject_AsHKEY(obKey, &hKey) ! &&PyWinObject_AsWCHAR(obsubKey, &subKey, FALSE) ! &&PyWinObject_AsHANDLE(obtrans, &htrans)){ ! rc=(*pfnRegDeleteKeyTransacted)(hKey, subKey, access, reserved, htrans, extparam); if (rc!=ERROR_SUCCESS) ! PyWin_SetAPIError("RegDeleteKeyTransacted", rc); else{ Py_INCREF(Py_None); --- 3024,3052 ---- HANDLE htrans; long rc; ! static char *keywords[]={"Key","SubKey","samDesired","Transaction", NULL}; ! if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|kO:RegDeleteKeyEx", keywords, &obKey, // @pyparm <o PyHKEY>/int|Key||Registry key or one of win32con.HKEY_* values &obsubKey, // @pyparm <o PyUnicode>|SubKey||Name of subkey to be deleted. ! &access, // @pyparm int|samDesired|0|Can be KEY_WOW64_32KEY or KEY_WOW64_64KEY to specify alternate registry view ! &obtrans)) // @pyparm <o PyHANDLE>|Transaction|None|Handle to a transaction as returned by <om win32transaction.CreateTransaction> return NULL; + + if (!PyWinObject_AsHANDLE(obtrans, &htrans)) + return NULL; + if (htrans!=NULL){ + CHECK_PFN(RegDeleteKeyTransacted); + } + else{ + CHECK_PFN(RegDeleteKeyEx); + } if (PyWinObject_AsHKEY(obKey, &hKey) ! &&PyWinObject_AsWCHAR(obsubKey, &subKey, FALSE)){ ! if (htrans!=NULL) ! rc=(*pfnRegDeleteKeyTransacted)(hKey, subKey, access, reserved, htrans, extparam); ! else ! rc=(*pfnRegDeleteKeyEx)(hKey, subKey, access, reserved); if (rc!=ERROR_SUCCESS) ! PyWin_SetAPIError("RegDeleteKeyEx", rc); else{ Py_INCREF(Py_None); *************** *** 6007,6011 **** {"RegCreateKeyEx", (PyCFunction)PyRegCreateKeyEx, METH_KEYWORDS|METH_VARARGS}, // @pymeth RegCreateKeyEx|Extended version of RegCreateKey {"RegDeleteKey", PyRegDeleteKey, 1}, // @pymeth RegDeleteKey|Deletes the specified key. ! {"RegDeleteKeyTransacted",(PyCFunction)PyRegDeleteKeyTransacted, METH_KEYWORDS|METH_VARARGS}, // @pymeth RegDeleteKeyTransacted|Deletes a registry key as part of a transaction {"RegDeleteTree", (PyCFunction)PyRegDeleteTree, METH_KEYWORDS|METH_VARARGS}, // @pymeth RegDeleteTree|Recursively deletes a key's subkeys and values {"RegDeleteValue", PyRegDeleteValue, 1}, // @pymeth RegDeleteValue|Removes a named value from the specified registry key. --- 6022,6026 ---- {"RegCreateKeyEx", (PyCFunction)PyRegCreateKeyEx, METH_KEYWORDS|METH_VARARGS}, // @pymeth RegCreateKeyEx|Extended version of RegCreateKey {"RegDeleteKey", PyRegDeleteKey, 1}, // @pymeth RegDeleteKey|Deletes the specified key. ! {"RegDeleteKeyEx", (PyCFunction)PyRegDeleteKeyEx, METH_KEYWORDS|METH_VARARGS}, // @pymeth RegDeleteKeyEx|Deletes a registry key from 32 or 64 bit registry view {"RegDeleteTree", (PyCFunction)PyRegDeleteTree, METH_KEYWORDS|METH_VARARGS}, // @pymeth RegDeleteTree|Recursively deletes a key's subkeys and values {"RegDeleteValue", PyRegDeleteValue, 1}, // @pymeth RegDeleteValue|Removes a named value from the specified registry key. *************** *** 6197,6200 **** --- 6212,6216 ---- pfnRegCreateKeyTransacted=(RegCreateKeyTransactedfunc)GetProcAddress(hmodule, "RegCreateKeyTransactedW"); pfnRegOpenKeyTransacted=(RegOpenKeyTransactedfunc)GetProcAddress(hmodule, "RegOpenKeyTransactedW"); + pfnRegDeleteKeyEx=(RegDeleteKeyExfunc)GetProcAddress(hmodule, "RegDeleteKeyExW"); pfnRegDeleteKeyTransacted=(RegDeleteKeyTransactedfunc)GetProcAddress(hmodule, "RegDeleteKeyTransactedW"); pfnRegCopyTree=(RegCopyTreefunc)GetProcAddress(hmodule, "RegCopyTreeW"); |