Дока по ctypes на русском не поможет:) Нужно читать msdn
Ссылка на документацию по GetVolumeInformation -
http://msdn.microsoft.com/en-us/library/aa364993(VS.85).aspxСоздаем прокси-функцию:
import ctypes
GetVolumeInformation = windll.kernel32.GetVolumeInformationW
Теперь нужно рассказать, что функция принимает и что возвращает. По умолчанию - все int, но msdn говорит другое
from ctypes.wintypes import *
LPDWORD = ctypes.POINTER(DWORD)
GetVolumeInformation.restype = BOOL
GetVolumeInformation.argtypes = LPWSTR, LPWSTR, DWORD, LPDWORD, LPDWORD, LPDWORD, LPWSTR, DWORD
Заводим переменные для возвращаемых значений. Для указателей есть byref. Строки в Питоне неизменяемые, поэтому применяем create_unicode_buffer
byref = ctypes.byref
volumeNameBuffer = ctypes.create_unicode_buffer(1024)
volumeSerialNumber = DWORD()
maximumComponentLenght = DWORD()
fileSystemFlags = DWORD()
fileSystemNameBuffer = ctypes.create_unicode_buffer(1024)
Теперь осталось только вызвать
ret = GetVolumeInformation(u'c:\\', volumeNameBuffer, 1024, byref(volumeSerialNumber), byref(maximumComponentLenght), byref(fileSystemFlags),fileSystemNameBuffer, 1024)
У меня получилось:
>>> ret
1
>>> volumeNameBuffer.value
u'VistaOS'
>>> volumeSerialNumber.value
3233505920L
>>> maximumComponentLenght.value
255L
>>> fileSystemFlags.value
2556159L
>>> fileSystemNameBuffer.value
u'NTFS'
Вот и все. Бывает, нужно описать структуру через ctypes.Structure или сделать еще какое телодвижение - но это на самом деле элементарно.