[python-win32] Question on parsing Reparse Points

pbx pbeisel at gmail.com
Sun Oct 3 00:56:55 CEST 2010


hello, there seems to be something wrong with this,

target always seems to be prepended with some data like ?\\? before the
expected string (e.g. C:\Users\...) starts.  

the printname_len is accurate in that is represents the raw (byte) length of
the string excluding this starting ?\\?

is there an offset bug here?

thanks.

phil


Roger Upole wrote:
> 
> The only way I know of is to call win32file.DeviceIoControl
> with FSCTL_GET_REPARSE_POINT, and unpack the
> buffer yourself.
> 
>        Roger
> 
> 
> import win32con, winioctlcon, winnt, win32file
> import struct
> 
> def get_reparse_target(fname):
> 	h = win32file.CreateFile(fname, 0,
> 	
> win32con.FILE_SHARE_READ|win32con.FILE_SHARE_WRITE|win32con.FILE_SHARE_DELETE,
> None,
> 		win32con.OPEN_EXISTING,
> 	
> win32file.FILE_FLAG_OVERLAPPED|win32file.FILE_FLAG_OPEN_REPARSE_POINT|win32file.FILE_FLAG_BACKUP_SEMANTICS,
> 0)
> 
> 
> output_buf=win32file.AllocateReadBuffer(winnt.MAXIMUM_REPARSE_DATA_BUFFER_SIZE)
> 	buf=win32file.DeviceIoControl(h,
> winioctlcon.FSCTL_GET_REPARSE_POINT,None,
> 		OutBuffer=output_buf, Overlapped=None)
> 	fixed_fmt='LHHHHHH'
> 	fixed_len=struct.calcsize(fixed_fmt)
> 	tag, datalen, reserved, target_offset, target_len, printname_offset,
> printname_len = \
> 		struct.unpack(fixed_fmt, buf[:fixed_len])
> 
> 	## variable size target data follows the fixed portion of the buffer
> 	name_buf=buf[fixed_len:]
> 
> 	target_buf=name_buf[target_offset:target_offset+target_len]
> 	target=target_buf.decode('utf-16-le')
> 	return target
> 
> 
> _______________________________________________
> python-win32 mailing list
> python-win32 at python.org
> http://mail.python.org/mailman/listinfo/python-win32
> 
> 

-- 
View this message in context: http://old.nabble.com/Question-on-parsing-Reparse-Points-tp22610814p29868667.html
Sent from the Python - python-win32 mailing list archive at Nabble.com.



More information about the python-win32 mailing list