def testSHNAMEMAPPINGS(file_cnt): ## attemps to move a set of files to names that already exist, and generated filenames should be returned ## as a sequence of 2-tuples created from SHNAMEMAPPINGS handle temp_dir = os.environ["temp"] orig_fnames = [ win32api.GetTempFileName(temp_dir, "sfo")[0] for x in range(file_cnt) ] new_fnames = [ win32api.GetTempFileName(temp_dir, "sfo")[0] for x in range(file_cnt) ] pFrom = "\0".join(orig_fnames) pTo = "\0".join(new_fnames) rc, banyaborted, NameMappings = shell.SHFileOperation(( 0, shellcon.FO_MOVE, pFrom, pTo, shellcon.FOF_MULTIDESTFILES | shellcon.FOF_NOCONFIRMATION | shellcon.FOF_RENAMEONCOLLISION | shellcon.FOF_WANTMAPPINGHANDLE, )) for old_fname, new_fname in NameMappings: print("Old:", old_fname, "New:", new_fname) assert len(NameMappings) == file_cnt
def testSHFileOperation(file_cnt): temp_dir = os.environ["temp"] orig_fnames = [ win32api.GetTempFileName(temp_dir, "sfo")[0] for x in range(file_cnt) ] new_fnames = [ os.path.join(temp_dir, "copy of " + os.path.split(orig_fnames[x])[1]) for x in range(file_cnt) ] pFrom = "\0".join(orig_fnames) pTo = "\0".join(new_fnames) shell.SHFileOperation(( 0, shellcon.FO_MOVE, pFrom, pTo, shellcon.FOF_MULTIDESTFILES | shellcon.FOF_NOCONFIRMATION, )) for fname in orig_fnames: assert not os.path.isfile(fname) for fname in new_fnames: assert os.path.isfile(fname) shell.SHFileOperation(( 0, shellcon.FO_DELETE, fname, None, shellcon.FOF_NOCONFIRMATION | shellcon.FOF_NOERRORUI, ))
def demo(): """ Definition of buffer used with FSCTL_TXFS_CREATE_MINIVERSION: typedef struct _TXFS_CREATE_MINIVERSION_INFO{ USHORT StructureVersion; USHORT StructureLength; ULONG BaseVersion; USHORT MiniVersion;} """ buf_fmt='HHLH0L' ## buffer size must include struct padding buf_size=struct.calcsize(buf_fmt) tempdir=win32api.GetTempPath() tempfile=win32api.GetTempFileName(tempdir,'cft')[0] print("Demonstrating transactions on tempfile", tempfile) f=open(tempfile,'w') f.write('This is original file.\n') f.close() trans=win32transaction.CreateTransaction(Description='Test creating miniversions of a file') hfile=win32file.CreateFileW(tempfile, win32con.GENERIC_READ|win32con.GENERIC_WRITE, win32con.FILE_SHARE_READ|win32con.FILE_SHARE_WRITE, None, win32con.OPEN_EXISTING, 0 , None, Transaction=trans) win32file.WriteFile(hfile, str2bytes('This is first miniversion.\n')) buf=win32file.DeviceIoControl(hfile, winioctlcon.FSCTL_TXFS_CREATE_MINIVERSION,None,buf_size,None) struct_ver, struct_len, base_ver, ver_1=struct.unpack(buf_fmt, buf) win32file.SetFilePointer(hfile, 0, win32con.FILE_BEGIN) win32file.WriteFile(hfile, str2bytes('This is second miniversion!\n')) buf=win32file.DeviceIoControl(hfile, winioctlcon.FSCTL_TXFS_CREATE_MINIVERSION,None,buf_size,None) struct_ver, struct_len, base_ver, ver_2=struct.unpack(buf_fmt, buf) hfile.Close() ## miniversions can't be opened with write access hfile_0=win32file.CreateFileW(tempfile, win32con.GENERIC_READ, win32con.FILE_SHARE_READ|win32con.FILE_SHARE_WRITE, None, win32con.OPEN_EXISTING, 0 , None, Transaction=trans, MiniVersion=base_ver) print('version:',base_ver,win32file.ReadFile(hfile_0, 100)) hfile_0.Close() hfile_1=win32file.CreateFileW(tempfile, win32con.GENERIC_READ, win32con.FILE_SHARE_READ|win32con.FILE_SHARE_WRITE, None, win32con.OPEN_EXISTING, 0 , None, Transaction=trans, MiniVersion=ver_1) print('version:',ver_1,win32file.ReadFile(hfile_1, 100)) hfile_1.Close() hfile_2=win32file.CreateFileW(tempfile, win32con.GENERIC_READ, win32con.FILE_SHARE_READ|win32con.FILE_SHARE_WRITE, None, win32con.OPEN_EXISTING, 0 , None, Transaction=trans, MiniVersion=ver_2) print('version:',ver_2,win32file.ReadFile(hfile_2, 100)) hfile_2.Close() ## MiniVersions are destroyed when transaction is committed or rolled back win32transaction.CommitTransaction(trans) os.unlink(tempfile)
def window_capture(): hwnd = 0 hwndDC = win32gui.GetWindowDC(hwnd) mfcDC = win32ui.CreateDCFromHandle(hwndDC) saveDC = mfcDC.CreateCompatibleDC() saveBitMap = win32ui.CreateBitmap() MoniterDev = win32api.EnumDisplayMonitors(None,None) w = MoniterDev[0][2][2] h = MoniterDev[0][2][3] print w, h saveBitMap.CreateCompatibleBitmap(mfcDC, w, h) saveDC.SelectObject(saveBitMap) saveDC.BitBlt((0,0),(w, h) , mfcDC, (0,0), win32con.SRCCOPY) bmpname=win32api.GetTempFileName(".","")[0]+'.bmp' saveBitMap.SaveBitmapFile(saveDC, bmpname) return bmpname
import win32api, win32security import win32con, ntsecuritycon, winnt import os temp_dir = win32api.GetTempPath() fname = win32api.GetTempFileName(temp_dir, 'rsk')[0] print(fname) ## file can't exist os.remove(fname) ## enable backup and restore privs required_privs = ((win32security.LookupPrivilegeValue('', ntsecuritycon.SE_BACKUP_NAME), win32con.SE_PRIVILEGE_ENABLED), (win32security.LookupPrivilegeValue('', ntsecuritycon.SE_RESTORE_NAME), win32con.SE_PRIVILEGE_ENABLED) ) ph = win32api.GetCurrentProcess() th = win32security.OpenProcessToken(ph, win32con.TOKEN_READ | win32con.TOKEN_ADJUST_PRIVILEGES) adjusted_privs = win32security.AdjustTokenPrivileges(th, 0, required_privs) try: sa = win32security.SECURITY_ATTRIBUTES() my_sid = win32security.GetTokenInformation(th, ntsecuritycon.TokenUser)[0] sa.SECURITY_DESCRIPTOR.SetSecurityDescriptorOwner(my_sid, 0) k, disp = win32api.RegCreateKeyEx(win32con.HKEY_CURRENT_USER, 'Python test key', SecurityAttributes=sa, samDesired=win32con.KEY_ALL_ACCESS, Class='some class', Options=0) win32api.RegSetValue(k, None, win32con.REG_SZ, 'Default value for python test key') subk, disp = win32api.RegCreateKeyEx(k, 'python test subkey', SecurityAttributes=sa, samDesired=win32con.KEY_ALL_ACCESS, Class='some other class', Options=0) win32api.RegSetValue(subk, None, win32con.REG_SZ, 'Default value for subkey')
def testit(self): fname, tmp = win32api.GetTempFileName(win32api.GetTempPath(), 'stg') m = storagecon.STGM_READWRITE | storagecon.STGM_SHARE_EXCLUSIVE ## file, mode, format, attrs (always 0), IID (IStorage or IPropertySetStorage, storage options(only used with STGFMT_DOCFILE) pss = pythoncom.StgOpenStorageEx(fname, m, storagecon.STGFMT_FILE, 0, pythoncom.IID_IPropertySetStorage) ### {"Version":2,"reserved":0,"SectorSize":512,"TemplateFile":u'somefilename'}) ## FMTID_SummaryInformation FMTID_DocSummaryInformation FMTID_UserDefinedProperties psuser = pss.Create(pythoncom.FMTID_UserDefinedProperties, pythoncom.IID_IPropertySetStorage, storagecon.PROPSETFLAG_DEFAULT, storagecon.STGM_READWRITE | storagecon.STGM_CREATE | storagecon.STGM_SHARE_EXCLUSIVE ) ## its very picky about flag combinations! psuser.WriteMultiple((3, 4), ('hey', 'bubba')) psuser.WritePropertyNames((3, 4), ('property3', 'property4')) expected_summaries = [] expected_summaries.append(('property3', 3, pythoncom.VT_BSTR)) expected_summaries.append(('property4', 4, pythoncom.VT_BSTR)) psuser = None pssum = pss.Create( pythoncom.FMTID_SummaryInformation, pythoncom.IID_IPropertySetStorage, storagecon.PROPSETFLAG_DEFAULT, storagecon.STGM_READWRITE | storagecon.STGM_CREATE | storagecon.STGM_SHARE_EXCLUSIVE) pssum.WriteMultiple( (storagecon.PIDSI_AUTHOR, storagecon.PIDSI_COMMENTS), ('me', 'comment')) pssum = None pss = None ## doesn't seem to be a close or release method, and you can't even reopen it from the same process until previous object is gone pssread = pythoncom.StgOpenStorageEx( fname, storagecon.STGM_READ | storagecon.STGM_SHARE_EXCLUSIVE, storagecon.STGFMT_FILE, 0, pythoncom.IID_IPropertySetStorage) found_summaries = [] for psstat in pssread: ps = pssread.Open( psstat[0], storagecon.STGM_READ | storagecon.STGM_SHARE_EXCLUSIVE) for p in ps: p_val = ps.ReadMultiple((p[1], ))[0] if (p[1]==storagecon.PIDSI_AUTHOR and p_val=='me') or \ (p[1]==storagecon.PIDSI_COMMENTS and p_val=='comment'): pass else: self.fail("Uxexpected property %s/%s" % (p, p_val)) ps = None ## FMTID_UserDefinedProperties can't exist without FMTID_DocSummaryInformation, and isn't returned independently from Enum ## also can't be open at same time if psstat[0] == pythoncom.FMTID_DocSummaryInformation: ps = pssread.Open( pythoncom.FMTID_UserDefinedProperties, storagecon.STGM_READ | storagecon.STGM_SHARE_EXCLUSIVE) for p in ps: found_summaries.append(p) ps = None psread = None expected_summaries.sort() found_summaries.sort() self.assertEqual(expected_summaries, found_summaries)
## demonstrates using BackupRead and BackupWrite to copy all of a file's data streams import win32file, win32api, win32con, win32security, ntsecuritycon from win32com import storagecon import pythoncom, pywintypes import struct, traceback from pywin32_testutil import str2bytes, ob2memory all_sd_info = win32security.DACL_SECURITY_INFORMATION | win32security.DACL_SECURITY_INFORMATION | \ win32security.OWNER_SECURITY_INFORMATION | win32security.GROUP_SECURITY_INFORMATION tempdir = win32api.GetTempPath() tempfile = win32api.GetTempFileName(tempdir, 'bkr')[0] outfile = win32api.GetTempFileName(tempdir, 'out')[0] print('Filename:', tempfile, 'Output file:', outfile) f = open(tempfile, 'w') f.write('some random junk' + 'x' * 100) f.close() ## add a couple of alternate data streams f = open(tempfile + ':streamdata', 'w') f.write('data written to alternate stream' + 'y' * 100) f.close() f = open(tempfile + ':anotherstream', 'w') f.write('z' * 100) f.close() ## add Summary Information, which is stored as a separate stream m = storagecon.STGM_READWRITE | storagecon.STGM_SHARE_EXCLUSIVE | storagecon.STGM_DIRECT
import win32api, win32security import win32con, ntsecuritycon, winnt import os temp_dir = win32api.GetTempPath() fname = win32api.GetTempFileName(temp_dir, "rsk")[0] print(fname) ## file can't exist os.remove(fname) ## enable backup and restore privs required_privs = ( ( win32security.LookupPrivilegeValue("", ntsecuritycon.SE_BACKUP_NAME), win32con.SE_PRIVILEGE_ENABLED, ), ( win32security.LookupPrivilegeValue("", ntsecuritycon.SE_RESTORE_NAME), win32con.SE_PRIVILEGE_ENABLED, ), ) ph = win32api.GetCurrentProcess() th = win32security.OpenProcessToken( ph, win32con.TOKEN_READ | win32con.TOKEN_ADJUST_PRIVILEGES ) adjusted_privs = win32security.AdjustTokenPrivileges(th, 0, required_privs) try: sa = win32security.SECURITY_ATTRIBUTES() my_sid = win32security.GetTokenInformation(th, ntsecuritycon.TokenUser)[0] sa.SECURITY_DESCRIPTOR.SetSecurityDescriptorOwner(my_sid, 0)
def ProgressRoutine(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred, StreamNumber, CallbackReason, SourceFile, DestinationFile, Data): print(Data) print(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred, StreamNumber, CallbackReason, SourceFile, DestinationFile) # if TotalBytesTransferred > 100000: # return win32file.PROGRESS_STOP return win32file.PROGRESS_CONTINUE temp_dir = win32api.GetTempPath() fsrc = win32api.GetTempFileName(temp_dir, 'cfe')[0] fdst = win32api.GetTempFileName(temp_dir, 'cfe')[0] print(fsrc, fdst) f = open(fsrc, 'w') f.write('xxxxxxxxxxxxxxxx\n' * 32768) f.close() # add a couple of extra data streams f = open(fsrc + ':stream_y', 'w') f.write('yyyyyyyyyyyyyyyy\n' * 32768) f.close() f = open(fsrc + ':stream_z', 'w') f.write('zzzzzzzzzzzzzzzz\n' * 32768) f.close() operation_desc = 'Copying ' + fsrc + ' to ' + fdst
import win32security,win32api,win32con, win32process fname, tmp = win32api.GetTempFileName(win32api.GetTempPath(),'tmp') print(fname) ## You need SE_RESTORE_NAME to be able to set the owner of a security descriptor to anybody ## other than yourself or your primary group. Most admin logins don't have it by default, so ## enabling it may fail new_privs = ((win32security.LookupPrivilegeValue('',win32security.SE_SECURITY_NAME),win32con.SE_PRIVILEGE_ENABLED), (win32security.LookupPrivilegeValue('',win32security.SE_TCB_NAME),win32con.SE_PRIVILEGE_ENABLED), (win32security.LookupPrivilegeValue('',win32security.SE_SHUTDOWN_NAME),win32con.SE_PRIVILEGE_ENABLED), (win32security.LookupPrivilegeValue('',win32security.SE_RESTORE_NAME),win32con.SE_PRIVILEGE_ENABLED), (win32security.LookupPrivilegeValue('',win32security.SE_TAKE_OWNERSHIP_NAME),win32con.SE_PRIVILEGE_ENABLED), (win32security.LookupPrivilegeValue('',win32security.SE_CREATE_PERMANENT_NAME),win32con.SE_PRIVILEGE_ENABLED), (win32security.LookupPrivilegeValue('',win32security.SE_ENABLE_DELEGATION_NAME),win32con.SE_PRIVILEGE_ENABLED), (win32security.LookupPrivilegeValue('',win32security.SE_CHANGE_NOTIFY_NAME),win32con.SE_PRIVILEGE_ENABLED), (win32security.LookupPrivilegeValue('',win32security.SE_DEBUG_NAME),win32con.SE_PRIVILEGE_ENABLED), (win32security.LookupPrivilegeValue('',win32security.SE_PROF_SINGLE_PROCESS_NAME),win32con.SE_PRIVILEGE_ENABLED), (win32security.LookupPrivilegeValue('',win32security.SE_SYSTEM_PROFILE_NAME),win32con.SE_PRIVILEGE_ENABLED), (win32security.LookupPrivilegeValue('',win32security.SE_LOCK_MEMORY_NAME),win32con.SE_PRIVILEGE_ENABLED) ) all_info=win32security.OWNER_SECURITY_INFORMATION|win32security.GROUP_SECURITY_INFORMATION| win32security.DACL_SECURITY_INFORMATION|win32security.SACL_SECURITY_INFORMATION ph=win32process.GetCurrentProcess() th = win32security.OpenProcessToken(ph,win32security.TOKEN_ALL_ACCESS) ##win32con.TOKEN_ADJUST_PRIVILEGES) win32security.AdjustTokenPrivileges(th,0,new_privs) my_sid = win32security.GetTokenInformation(th,win32security.TokenUser)[0] pwr_sid=win32security.LookupAccountName('','Power Users')[0] sd=win32security.GetNamedSecurityInfo(fname,win32security.SE_FILE_OBJECT,all_info) dacl=sd.GetSecurityDescriptorDacl() if dacl is None:
import win32file, win32api, win32transaction import win32con, winioctlcon import struct """ Definition of buffer used with FSCTL_TXFS_CREATE_MINIVERSION: typedef struct _TXFS_CREATE_MINIVERSION_INFO{ USHORT StructureVersion; USHORT StructureLength; ULONG BaseVersion; USHORT MiniVersion;} """ buf_fmt = 'HHLH0L' ## buffer size must include struct padding buf_size = struct.calcsize(buf_fmt) tempdir = win32api.GetTempPath() tempfile = win32api.GetTempFileName(tempdir, 'cft')[0] print tempfile f = open(tempfile, 'w') f.write('This is original file.\n') f.close() trans = win32transaction.CreateTransaction( Description='Test creating miniversions of a file') hfile = win32file.CreateFileW(tempfile, win32con.GENERIC_READ | win32con.GENERIC_WRITE, win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE, None, win32con.OPEN_EXISTING, 0, None,
import struct, traceback stream_types = { win32con.BACKUP_DATA: "Standard data", win32con.BACKUP_EA_DATA: "Extended attribute data", win32con.BACKUP_SECURITY_DATA: "Security descriptor data", win32con.BACKUP_ALTERNATE_DATA: "Alternative data streams", win32con.BACKUP_LINK: "Hard link information", win32con.BACKUP_PROPERTY_DATA: "Property data", win32con.BACKUP_OBJECT_ID: "Objects identifiers", win32con.BACKUP_REPARSE_DATA: "Reparse points", win32con.BACKUP_SPARSE_BLOCK: "Sparse file", } tempdir = win32api.GetTempPath() tempfile = win32api.GetTempFileName(tempdir, "bkr")[0] print("Filename:", tempfile) f = open(tempfile, "w") f.write("some random junk" + "x" * 100) f.close() f = open(tempfile + ":streamdata", "w") f.write("data written to alternate stream" + "y" * 100) f.close() f = open(tempfile + ":anotherstream", "w") f.write("z" * 200) f.close() ## add Summary Information, which is stored as a separate stream
f.write(input_buffer) ## python 2.3 throws an error if return value is a plain int return winerror.ERROR_SUCCESS def WriteCallback(output_buffer, data, buflen): fnamebackup, fnameout, f = data file_data = f.read(buflen) ## returning 0 as len terminates WriteEncryptedFileRaw output_len = len(file_data) output_buffer[:output_len] = file_data return winerror.ERROR_SUCCESS, output_len tmp_dir = win32api.GetTempPath() dst_dir = win32api.GetTempFileName(tmp_dir, "oef")[0] os.remove(dst_dir) os.mkdir(dst_dir) print("Destination dir:", dst_dir) ## create an encrypted file fname = win32api.GetTempFileName(dst_dir, "ref")[0] print("orig file:", fname) f = open(fname, "w") f.write("xxxxxxxxxxxxxxxx\n" * 32768) f.close() ## add a couple of extra data streams f = open(fname + ":stream_y", "w") f.write("yyyyyyyyyyyyyyyy\n" * 32768) f.close() f = open(fname + ":stream_z", "w")
TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred, StreamNumber, CallbackReason, SourceFile, DestinationFile, ) ##if TotalBytesTransferred > 100000: ## return win32file.PROGRESS_STOP return win32file.PROGRESS_CONTINUE temp_dir = win32api.GetTempPath() fsrc = win32api.GetTempFileName(temp_dir, "cfe")[0] fdst = win32api.GetTempFileName(temp_dir, "cfe")[0] print(fsrc, fdst) f = open(fsrc, "w") f.write("xxxxxxxxxxxxxxxx\n" * 32768) f.close() ## add a couple of extra data streams f = open(fsrc + ":stream_y", "w") f.write("yyyyyyyyyyyyyyyy\n" * 32768) f.close() f = open(fsrc + ":stream_z", "w") f.write("zzzzzzzzzzzzzzzz\n" * 32768) f.close() operation_desc = "Copying " + fsrc + " to " + fdst
win32con.SE_PRIVILEGE_ENABLED), ) ph = win32api.GetCurrentProcess() th = win32security.OpenProcessToken( ph, win32security.TOKEN_ALL_ACCESS | win32con.TOKEN_ADJUST_PRIVILEGES) modified_privs = win32security.AdjustTokenPrivileges(th, 0, new_privs) ## look up a few sids that should be available on most systems my_sid = win32security.GetTokenInformation(th, ntsecuritycon.TokenUser)[0] pwr_sid = win32security.LookupAccountName('', 'Power Users')[0] admin_sid = win32security.LookupAccountName('', 'Administrators')[0] everyone_sid = win32security.LookupAccountName('', 'EveryOne')[0] ## create a dir and set security so Everyone has read permissions, and all files and subdirs inherit its ACLs temp_dir = win32api.GetTempPath() dir_name = win32api.GetTempFileName(temp_dir, 'sfa')[0] os.remove(dir_name) os.mkdir(dir_name) dir_dacl = win32security.ACL() dir_dacl.AddAccessAllowedAceEx(ACL_REVISION_DS, CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE, win32con.GENERIC_READ, everyone_sid) ## make sure current user has permissions on dir dir_dacl.AddAccessAllowedAceEx(ACL_REVISION_DS, CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE, win32con.GENERIC_ALL, my_sid) ## keep dir from inheriting any permissions so it only has ACEs explicitely set here win32security.SetNamedSecurityInfo( dir_name, SE_FILE_OBJECT, OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION | PROTECTED_DACL_SECURITY_INFORMATION, pwr_sid,
) ph = win32api.GetCurrentProcess() th = win32security.OpenProcessToken( ph, win32security.TOKEN_ALL_ACCESS | win32con.TOKEN_ADJUST_PRIVILEGES ) modified_privs = win32security.AdjustTokenPrivileges(th, 0, new_privs) ## look up a few sids that should be available on most systems my_sid = win32security.GetTokenInformation(th, ntsecuritycon.TokenUser)[0] pwr_sid = win32security.LookupAccountName("", "Power Users")[0] admin_sid = win32security.LookupAccountName("", "Administrators")[0] everyone_sid = win32security.LookupAccountName("", "EveryOne")[0] ## create a dir and set security so Everyone has read permissions, and all files and subdirs inherit its ACLs temp_dir = win32api.GetTempPath() dir_name = win32api.GetTempFileName(temp_dir, "sfa")[0] os.remove(dir_name) os.mkdir(dir_name) dir_dacl = win32security.ACL() dir_dacl.AddAccessAllowedAceEx( ACL_REVISION_DS, CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE, win32con.GENERIC_READ, everyone_sid, ) ## make sure current user has permissions on dir dir_dacl.AddAccessAllowedAceEx( ACL_REVISION_DS, CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE, win32con.GENERIC_ALL, my_sid,
from win32com.shell import shell, shellcon import pythoncom, win32api, os, sys temp_dir = win32api.GetTempPath() linkname = win32api.GetTempFileName(temp_dir, 'cmd')[0] os.remove(linkname) linkname += '.lnk' print 'Link name:', linkname ish = pythoncom.CoCreateInstance(shell.CLSID_ShellLink, None, pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IShellLink) ish.SetPath(os.environ['cOMSPEC']) ish.SetWorkingDirectory(os.path.split(sys.executable)[0]) ish.SetDescription('shortcut made by python') console_props = { 'Signature': shellcon.NT_CONSOLE_PROPS_SIG, 'InsertMode': True, 'FullScreen': False, ## True looks like "DOS Mode" from win98! 'FontFamily': 54, 'CursorSize': 75, ## pct of character size 'ScreenBufferSize': (152, 256), 'AutoPosition': False, 'FontSize': (4, 5), 'FaceName':
f.write(input_buffer) ## python 2.3 throws an error if return value is a plain int return winerror.ERROR_SUCCESS def WriteCallback(output_buffer, data, buflen): fnamebackup, fnameout, f = data file_data = f.read(buflen) ## returning 0 as len terminates WriteEncryptedFileRaw output_len = len(file_data) output_buffer[:output_len] = file_data return winerror.ERROR_SUCCESS, output_len tmp_dir = win32api.GetTempPath() dst_dir = win32api.GetTempFileName(tmp_dir, 'oef')[0] os.remove(dst_dir) os.mkdir(dst_dir) print 'Destination dir:', dst_dir ## create an encrypted file fname = win32api.GetTempFileName(dst_dir, 'ref')[0] print 'orig file:', fname f = open(fname, 'w') f.write('xxxxxxxxxxxxxxxx\n' * 32768) f.close() ## add a couple of extra data streams f = open(fname + ':stream_y', 'w') f.write('yyyyyyyyyyyyyyyy\n' * 32768) f.close() f = open(fname + ':stream_z', 'w')
from win32com.shell import shell, shellcon import pythoncom, win32api, os, sys temp_dir = win32api.GetTempPath() linkname = win32api.GetTempFileName(temp_dir, "cmd")[0] os.remove(linkname) linkname += ".lnk" print("Link name:", linkname) ish = pythoncom.CoCreateInstance( shell.CLSID_ShellLink, None, pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IShellLink ) ish.SetPath(os.environ["cOMSPEC"]) ish.SetWorkingDirectory(os.path.split(sys.executable)[0]) ish.SetDescription("shortcut made by python") console_props = { "Signature": shellcon.NT_CONSOLE_PROPS_SIG, "InsertMode": True, "FullScreen": False, ## True looks like "DOS Mode" from win98! "FontFamily": 54, "CursorSize": 75, ## pct of character size "ScreenBufferSize": (152, 256), "AutoPosition": False, "FontSize": (4, 5), "FaceName": "", "HistoryBufferSize": 32, "InputBufferSize": 0, "QuickEdit": True, "Font": 0, ## 0 should always be present, use win32console.GetNumberOfConsoleFonts() to find how many available "FillAttribute": 7, "PopupFillAttribute": 245,