Ai
3 Star 0 Fork 0

河北素数信息安全有限公司/crypto-hw-std-interface

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
file.go 3.10 KB
一键复制 编辑 原始数据 按行查看 历史
zhaoyexun 提交于 2025-04-24 10:12 +08:00 . 修复读文件byte容量固定问题
package skf
import (
"fmt"
"gitee.com/sushuxinan/crypto-hw-std-interface/skf/util"
"unsafe"
)
// EnumerateFile 枚举出应用中的所有文件
//
// handle 应用句柄
func EnumerateFile(handle unsafe.Pointer) ([]string, error) {
var listLen uint32
// 先获取应用列表字节长度
if c := enumFiles(handle, nil, &listLen); c != util.Ok {
return nil, fmt.Errorf("文件列表获取失败:%s", util.ParseErrorCode(c))
}
nameList := make([]byte, listLen)
// 再获取应用列表
if c := enumFiles(handle, &nameList[0], &listLen); c != util.Ok {
return nil, fmt.Errorf("文件列表获取失败:%s", util.ParseErrorCode(c))
}
return util.ParseList(nameList), nil
}
// GetFileInfo 获取名称为 filename 的文件信息
//
// handle 应用句柄 filename 文件名称
func GetFileInfo(handle unsafe.Pointer, filename string) (*FileAttribute, error) {
filenameBytes := []byte(filename)
info := &FileAttribute{}
if c := getFileInfo(handle, &filenameBytes[0], info); c != util.Ok {
return nil, fmt.Errorf("文件信息获取失败:%s", util.ParseErrorCode(c))
}
return info, nil
}
// CreateFile 在应用中创建文件
//
// handle 应用句柄 info 文件信息
func CreateFile(handle unsafe.Pointer, info *FileInfo) error {
if info.Filename == "" {
return fmt.Errorf("文件名称不能为空")
}
if info.Size == 0 {
return fmt.Errorf("文件大小不能为空")
}
if info.ReadRights == 0 {
info.ReadRights = SECURE_ANYONE_ACCOUNT
}
if info.WriteRights == 0 {
info.WriteRights = SECURE_ANYONE_ACCOUNT
}
filenameBytes := []byte(info.Filename)
c := createFile(handle, &filenameBytes[0], info.Size, info.ReadRights, info.WriteRights)
if c != util.Ok {
return fmt.Errorf("创建文件失败:%s", util.ParseErrorCode(c))
}
return nil
}
// DeleteFile 删除应用中名称为 filename 的文件
//
// handle 应用句柄 filename 文件名称
func DeleteFile(handle unsafe.Pointer, filename string) error {
filenameBytes := []byte(filename)
if c := deleteFile(handle, &filenameBytes[0]); c != util.Ok {
return fmt.Errorf("删除文件失败:%s", util.ParseErrorCode(c))
}
return nil
}
// ReadFile 读取应用中名称为 filename 的文件
//
// handle 应用句柄 filename 文件名 offset 文件读取偏移量 size 要读取长度
func ReadFile(handle unsafe.Pointer, filename string, offset, size uint32) ([]byte, error) {
var (
outDataLen = size
outData = make([]byte, size)
filenameBytes = []byte(filename)
)
c := readFile(handle, &filenameBytes[0], offset, size, &outData[0], &outDataLen)
if c != util.Ok {
return nil, fmt.Errorf("读取文件失败:%s", util.ParseErrorCode(c))
}
return outData[:outDataLen], nil
}
// WriteFile 向应用中写入文件
//
// handle 应用句柄 filename 文件名 offset 文件写入偏移位置 inData 写入的数据
func WriteFile(handle unsafe.Pointer, filename string, offset uint32, inData []byte) error {
filenameBytes := []byte(filename)
c := writeFile(handle, &filenameBytes[0], offset, &inData[0], uint32(len(inData)))
if c != util.Ok {
return fmt.Errorf("写入文件失败:%s", util.ParseErrorCode(c))
}
return nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/sushuxinan/crypto-hw-std-interface.git
git@gitee.com:sushuxinan/crypto-hw-std-interface.git
sushuxinan
crypto-hw-std-interface
crypto-hw-std-interface
skf/v0.0.6

搜索帮助