python 结构体 c_Python与C/C++中结构体

应用场景:

由C++提供核心接口,利用python定制前端或者用户配置

from ctypes import *

# duba scan and kill virus result structure define

class KAE_SCAN_RESULT(Structure):

_fields_ = [('nVirusNameSize', c_int),

('szVirusName', c_char*256),

('ScanStatus', c_uint32),

('ScanVirusType', c_uint32),

('ScanProcessResult', c_uint32),

('AVEngine', c_uint32),

('nVirusID', c_int),

('CleanVirusID', c_uint32),

('pvScanSign', c_uint32),

('Reserve', c_ubyte*16)]

class ENGBASE_SCAN_RESULT_EX(Structure):

_fields_ = [('dwSize', c_uint32),

('kaeScanResult', KAE_SCAN_RESULT),

('lScanTime', c_longlong),

('dwVirusID', c_uint32),

('dwCleanVirusID', c_uint32)]

# path visit callback function

from os.path import walk, join, normpath

import sys

import os.path

from os import getcwd

def visit(arg, dirname, names):

#print "\n".join(dirname)

files=[normpath(join(dirname, file)) for file in names]

#count = 0

print "in visit ..."

for i in files:

if os.path.isfile(i):

#count += 1

print "File:", i

nRetVal = EngBase.EngBaseScanFileExA(i, pointer(info))

print "scan result : ", nRetVal

# scan directory

def ScanPath(despath):

global info

info = ENGBASE_SCAN_RESULT_EX()

info.dwSize = sizeof(ENGBASE_SCAN_RESULT_EX)

print info.kaeScanResult.nVirusNameSize

fileName = "EngBase.dll"

global EngBase

EngBase = windll.LoadLibrary(fileName)

print EngBase

nRetVal = EngBase.EngBaseInitA()

print "init : ", nRetVal

# scanFile="c:\\boot.ini"

# nRetVal = EngBase.EngBaseScanFileExA(scanFile, pointer(info))

# print "scan : ", nRetVal

# print "virus name : ", info.kaeScanResult.szVirusName

try:

print "to scan : ", despath

walk(despath, visit, 0)

except BaseException:

print "walk error."

nRetVal = EngBase.EngBaseUnInitA()

print "uninit : ", nRetVal

# parse cmd line

def usage():

print "Usage : Python XXX.py "

import getopt, sys

def main():

try:

opts, args = getopt.getopt(sys.argv[1:], "p:v", ["help", "output="])

except getopt.GetoptError:

# print help information and exit:

usage()

sys.exit(2)

verbose = False

print "in ..."

for o, a in opts:

verbose = True

if o == "-p":

ScanPath(a)

elif o in ("-h", "--help"):

usage()

sys.exit()

else:

usage()

if verbose == False :

usage()

# program run start by this

if __name__ == "__main__":

main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值