calling NetShareEnum win32api with ctypes

taghi eghlim84 at gmail.com
Thu Aug 28 01:00:48 EDT 2008


I want to call NetShareEnum, a function from netapi32.dll
NetShareEnum has this definition:

NET_API_STATUS NetShareEnum(
  __in     LPWSTR servername,
  __in     DWORD level,
  __out    LPBYTE *bufptr,
  __in     DWORD prefmaxlen,
  __out    LPDWORD entriesread,
  __out    LPDWORD totalentries,
  __inout  LPDWORD resume_handle
);

I wrote this code in python 2.5:

from ctypes import *

cname=c_wchar_p('a-computer-name')
level=c_int(1)
bufptr=create_string_buffer('\00', 10000)
prefmaxlen=c_int(9999)
entriesread=c_long(0)
totalentries=c_long(0)
resume=c_long(0)

netapi32=cdll.LoadLibrary('netapi32.dll')
netapi32.NetShareEnum(cname, level, byref(bufptr), prefmaxlen,
byref(entriesread), byref(totalentries), byref(resume))

but I get this error:
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    s.NetShareEnum(name, level, byref(bufptr), prefmaxlen,
entriesread, totalentries, resume)
ValueError: Procedure called with not enough arguments (28 bytes
missing) or wrong calling convention

entriesread and totalentries has valid values after call but bufptr is
not.
I pass bufptr to function instead of byref(bufptr) but the error was
same.



More information about the Python-list mailing list