|
アセンブラで WinUSB を記述する サンプルを記載しておく
/A は 私の構造化言語の中にアセンブラ記述したものをそのまま複写しておいた
私の言語のローカル変数に値を転送するための記述がある
確認のため や 判定のための 言語記述は除いた
アセンブラで制御を必要とするひとの 参考になれば イインダガ
SetupDiGetClassDevsA proto :DWORD,:DWORD,:DWORD,:DWORD
SetupDiEnumDeviceInterfaces proto :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
SetupDiDestroyDeviceInfoList proto :DWORD
SetupDiEnumDeviceInfo proto :DWORD,:DWORD,:DWORD
SetupDiGetDeviceRegistryPropertyA proto :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
SetupDiGetDeviceInterfaceDetailA proto :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
WinUsb_Initialize proto :DWORD,:DWORD
WinUsb_WritePipe PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
WinUsb_ReadPipe PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
WinUsb_Free PROTO :DWORD
includelib \WinDDK\7600.16385.0\lib\wxp\i386\WinUsb.lib
includelib \WinDDK\7600.16385.0\lib\wxp\i386\setupapi.lib
/A USBHND HWND ?
/A GGID db 128 dup(?)
/A INTFIND DD ?
/A CBSIZ DD ?
/* 構造体宣言だす */
/A GUID STRUCT ;typedef struct _GUID {
/A Data1 DD ? ;DWORD; // 00000000-
/A Data2 DW ? ;WORD; // 0000-
/A Data3 DW ? ;WORD ; // 0000-
/A Data4 DB 8 DUP(?) ; BYTE Data4[8]; // C000-000000000046
/A GUID ENDS ;
/A SP_DEVICE_INTERFACE_DATA STRUCT ;typedef struct _SP_DEVICE_INTERFACE_DATA {
/A cbSize DWORD ? ;4
/A InterfaceClassGuid GUID <> ;16
/A Flags DWORD ? ;4
/A Reserved DD ? ;4 ULONG_PTR; 32-> 4 ポインター
/A SP_DEVICE_INTERFACE_DATA ENDS ;} SP_DEVICE_INTERFACE_DATA, *PSP_DEVICE_INTERFACE_DATA;
/A SP_DEVINFO_DATA struct
/A cbSize DWORD ? ;4
/A ClassGuid GUID <> ;16
/A DevInst DWORD ? ;4 // DEVINST handle
/A Reserved DD ? ;4 ULONG_PTR; 32B ->4 64B ->8 ポインター
/A SP_DEVINFO_DATA ENDS ;, *PSP_DEVINFO_DATA;
/A SP_DEVICE_INTERFACE_DETAIL_DATA_A struct ; typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_A {
/A cbSize DWORD ? ; cbSize;
/A DevicePath DB ? ;CHAR DevicePath[ANYSIZE_ARRAY]; 1 ANYSIZE_ARRAY -> 1
/A DevicePathD DB 255 DUP(?) ;実行後判定した計算後出てきた 54H
/A SP_DEVICE_INTERFACE_DETAIL_DATA_A ENDS ; } SP_DEVICE_INTERFACE_DETAIL_DATA_A, *PSP_DEVICE_INTERFACE_DETAIL_DATA_A;
/A SetupDiGetDeviceRegistryProperty struct ;(
/A DeviceInfoSet DD ?; __in HDEVINFO ,あらゆる型へのポインター
/A DeviceInfoData DD ? ; __in PSP_DEVINFO_DATA, 構造体のポインター
/A Property DD ? ; __in DWORD ,
/A PropertyRegDataType DD ? ; __out_opt PDWORD, DWORD型へのポインタ
/A PropertyBuffer DD ? ; __out_bcount_opt(PropertyBufferSize) PBYTE, バイト型 ポインター
/A PropertyBufferSize DD ? ; __in DWORD,
/A RequiredSize DD ? ; __out_opt PDWORD DWORD型へのポインタ
/A SetupDiGetDeviceRegistryProperty ENDS
/A InterfaceClassGuid GUID <>
/A SOTST SPDINFDATA <>
/A ;InterfaceDataStructure SP_DEVICE_INTERFACE_DATA <>
/A DInterfaceDataStructure SP_DEVICE_INTERFACE_DATA <>
/A InterfaceDataStructure DD ? ;ポインター
/A DevInfoData SP_DEVINFO_DATA <>;
/A DetailedInterfaceDataStructure SP_DEVICE_INTERFACE_DETAIL_DATA_A <> ;
/A ;CHKTEST DD 01234567H ;
/A PDetailedInterfaceDataStructure DD ? ;上記ポインター
/A PDevInfoData DD ? ;
/A DeviceInfoTable DD ? ;あらゆる型のポインターじゃと
/A InterfaceIndex DD ? ; DWORD = 0;
/A StatusLastError DD ? ; DWORD = 0;
/A dwRegType DD ? ; DWORD;
/A dwRegSize DD ? ; DWORD;
/A StructureSize DD ? ; DWORD = 0;
/A PropertyValueBuffer DD ? ; PBYTE;バイト型ポインター
/A MatchFound DD ? ; bool = false;
/A ErrorStatus DD ? ; DWORD;
/A BoolStatus DD ? ; BOOL = FALSE;
/A MyDeviceHandle DD ? ;USB ファイルハンドル
/A MyWinUSBInterfaceHandle DD ? ;USBハンドル
/A DPropertyValueBuffer DB 128 DUP(?) ;
/A BytesWritten DD ? ;
/A BytesRead DD ? ;
/A GTBFD DB 256 DUP(?)
/A MOV InterfaceClassGuid.Data1,58D07210H
/A MOV InterfaceClassGuid.Data2,027C1H
/A MOV InterfaceClassGuid.Data3,011DDH
/A MOV InterfaceClassGuid.Data4[0],0BDH
/A MOV InterfaceClassGuid.Data4[1],0BH
/A MOV InterfaceClassGuid.Data4[2],08H
/A MOV InterfaceClassGuid.Data4[3],00H
/A MOV InterfaceClassGuid.Data4[4],20H
/A MOV InterfaceClassGuid.Data4[5],0CH
/A MOV InterfaceClassGuid.Data4[6],09AH
/A MOV InterfaceClassGuid.Data4[7],066H
/A MOV EAX,OFFSET InterfaceClassGuid
/A MOV [EBP+4],EAX
|

- >
- コンピュータとインターネット
- >
- コンピュータ
- >
- その他コンピュータ




