2016-06-30 2 views
1

win32関数NetShareDelは、LPCWSTR LPCWSTRとDWORDの3つの引数をとります。はNetShareAddのargtypeです

だから私はargTypesのための次のリストを使用します。

C.windll.Netapi32.NetShareDel.argtypes = [LPCWSTR, LPCWSTR, c_int] 
C.windll.Netapi32.NetShareDel.restype = c_int 

C.windll.Netapi32.NetShareDel(server, shareName, 0) 

正常に動作しますが、私はNetShareAddに使用するかを把握することはできません。つまり、NET_SHARE_INFO構造体と、最後のByRefのためのバイト配列をespecialle(c_intの)引数。

は、ここでは、コードです:

def Share(server, shareName, dir):  
    info = SHARE_INFO_2() 

    STYPE_DISKTREE = 0 

    info.shi2_netname = shareName 
    info.shi2_path = dir 
    info.shi2_type = STYPE_DISKTREE 
    info.shi2_remark = "Shared: " + time.strftime("%Y%m%d-%H:%M") 
    info.shi2_max_uses = -1 
    info.shi2_passwd = "" 
    info.shi2_current_uses = 0 
    info.shi2_permissions = 0xFFFFFFFF 

    i = c_int() 

    bytearray = buffer(info)[:] 

    windll.Netapi32.NetShareAdd.argtypes = [LPCWSTR, c_int, ????, ????] 

    windll.Netapi32.NetShareAdd(server, 2, bytearray, C.byref(i)) 

NetShareAddの正しいargTypesのリストでしょうか?

+0

NET_API_STATUS NetShareAdd( _In_ LPWSTRサーバー名、 _In_のDWORDレベル、 _In_ LPBYTEのBUF、 parm_err _Out_ LPDWORD)。 – denfromufa

+0

https://msdn.microsoft.com/en-us/library/windows/desktop/bb525384(v=vs.85).aspx – denfromufa

+0

私は署名を知っていますが、3番目のパラメータには何を使用しますか? bytearray = buffer(info)[:]はPythonコードですが、どのようにargtypesを渡すのですか? – Laurijssen

答えて

1

それはライン

bytearray = buffer(info)[:] 

はバイトのポインタ型

byteptr = C.POINTER(C.wintypes.BYTE)(info) 

に変更した後argTypesの通話はもちろん、あまりにもPOINTER(BYTE)になり、最終的

まずワーキングガット:

C.windll.Netapi32.NetShareAdd.argtypes = [LPCWSTR, c_int, C.POINTER(C.wintypes.BYTE), C.POINTER(c_int)] 
C.windll.Netapi32.NetShareAdd.restype = c_int 

windll.Netapi32.NetShareAdd(server, 2, byteptr, C.byref(i))