我怎样才能得到在Python中的驱动器的名称

我有一个有效的驱动器号的列表,我想给最终用户提供一个select。 我想向他们展示驱动器的名称。 这里有一些代码应该显示驱动器名称F:\

 import ctypes kernel32 = ctypes.windll.kernel32 buf = ctypes.create_unicode_buffer(1024) kernel32.GetVolumeNameForVolumeMountPointW( ctypes.c_wchar_p("F:\\"), buf, ctypes.sizeof(buf) ) print buf.value 

但是,这会输出\\?\Volume{a8b6b3df-1a63-11e1-9f6f-0007e9ebdfbf}\ 。 我怎样才能得到窗口显示在资源pipe理器中的string(例如, KINGSTON ,对于我自己的某个闪存驱动器)?


编辑:

还是行不通:

 volumeNameBuffer = ctypes.create_unicode_buffer(1024) fileSystemNameBuffer = ctypes.create_unicode_buffer(1024) kernel32.GetVolumeInformationW( ctypes.c_wchar_p("C:\\"), volumeNameBuffer, ctypes.sizeof(volumeNameBuffer), fileSystemNameBuffer, ctypes.sizeof(fileSystemNameBuffer) ) 

这给了我这个错误:

 WindowsError: exception: access violation reading 0x3A353FA0 

尝试GetVolumeInformation函数。 它直接返回卷标。

你为什么不使用win32api.GetVolumeInformation?

 import win32api win32api.GetVolumeInformation("C:\\") 

输出

 ('WINDOWS', 1992293715, 255, 65470719, 'NTFS') 

使用上面的片段,我作为一个快速助手填充了缺少的(可选的,null)参数:

 import ctypes kernel32 = ctypes.windll.kernel32 volumeNameBuffer = ctypes.create_unicode_buffer(1024) fileSystemNameBuffer = ctypes.create_unicode_buffer(1024) serial_number = None max_component_length = None file_system_flags = None rc = kernel32.GetVolumeInformationW( ctypes.c_wchar_p("F:\\"), volumeNameBuffer, ctypes.sizeof(volumeNameBuffer), serial_number, max_component_length, file_system_flags, fileSystemNameBuffer, ctypes.sizeof(fileSystemNameBuffer) ) print volumeNameBuffer.value print fileSystemNameBuffer.value 

这应该是复制和粘贴能力。