die 4 Euronen wert. Auch wenn das Heft einfach nur Dreck ist.
Tada, Purebasic Code für den 'KartenTresor' lesen und schreiben
Code: Alles auswählen
#DF_APP_ID_OWOK_OFFLINE = $808301
#OI_DF_FID_AESKEY = "(BYTE) 0x01"
#OI_DF_FID_AESKEY_LEN = $20
#OI_DF_FID_PWD = "(BYTE) 0x02"
#OI_DF_FID_PWD_LEN = $20
#OI_DF_FID_PWD_UNPROT = "(BYTE) 0x08"
#OI_DF_FID_PWD_UNPROT_LEN = $20
#OI_DF_FID_SECURE_NOTEPAD = "(BYTE) 0x11"
#OI_DF_FID_SECURE_NOTEPAD_LEN= $400
#OI_ERR_CARD_AUTH = 13
#OI_ERR_CARDLOCKED = 4
#OI_ERR_CHANGE_KEY = 14
#OI_ERR_CREATE_DATA_FILE = 15
#OI_ERR_DEACTIVATE = 6
#OI_ERR_ENETWORK = 3
#OI_ERR_NO_READER = 2
#OI_ERR_NOT_INIT = $13
#OI_ERR_NOT_REGISTED = 5
#OI_ERR_PARAM = $12
#OI_ERR_PCSC_CONNECT = 10
#OI_ERR_PCSC_TRANSMIT = 11
#OI_ERR_READ_CARD = 20
#OI_ERR_READ_DATA_FILE = $10
#OI_ERR_SELECT_APP = 12
#OI_ERR_TIMEOUT_PIN = 8
#OI_ERR_UNKNOWN = $3E8
#OI_ERR_USER_CANCEL = 1
#OI_ERR_WRITE_DATA_FILE = $11
#OI_ERR_WRONG_PIN = 7
#OI_LOGIN_OPTION_DEBUG = $40
#OI_LOGIN_OPTION_RETURN_ON_CARD_LOCKED = 2
#OI_LOGIN_OPTION_RETURN_ON_CARD_NOT_REG = $10
#OI_LOGIN_OPTION_RETURN_ON_NO_READER = 1
#OI_LOGIN_OPTION_RETURN_ON_PIN_TIMEOUT = $80
#OI_LOGIN_OPTION_RETURN_ON_WRONG_CARD = 8
#OI_LOGIN_OPTION_RETURN_ON_WRONG_PIN = 4
#OI_LOGIN_OPTION_SHOW_BUT_CARD_DEACTIVATE = $20
#OI_OK = 0
#OI_REG_ENT_DEF_READER_NAME = "DefReaderName"
#OI_REG_ENT_DONT_ASK_SET_PWD = "DontAskSetPwd"
#OI_REG_ENT_DONT_ASK_SET_PWD_DEF = 0
#OI_REG_ENT_MIN_PWD_LEN= "MinPwdLen"
#OI_REG_ENT_MIN_PWD_LEN_DEF = 6
#OI_REG_PATH_MAIN = "SOFTWARE\\REINER SCT\\OWOK\\OI"
; Public Structure CMemRef
; Public m_pData As IntPtr
; Public m_nBufferLen As UInt32
; End Structure
Structure CMemRef
m_pData.l
m_nBufferLen.l
EndStructure
; Public Structure COiReqObj
; Public m_nSize As UInt32
; <MarshalAs(UnmanagedType.LPStr)> _
; Public m_zServerName As String
; <MarshalAs(UnmanagedType.ByValArray, SizeConst:=3, ArraySubType:=UnmanagedType.SysUInt)> _
; Public m_zSites As IntPtr()
; Public m_nPort As UInt16
; Public m_nOptions As UInt32
; <MarshalAs(UnmanagedType.LPStr)> _
; Public m_zDialogTitle As String
; <MarshalAs(UnmanagedType.LPStr)> _
; Public m_zLabelButtonCancel As String
; <MarshalAs(UnmanagedType.LPStr)> _
; Public m_zLabelButtonDeactivate As String
; End Structure
Structure COiReqObj
m_nSize.l
m_zServerName.s
m_zSites.l
m_nPort.w
m_nOptions.l
m_zDialogTitle.s
m_zLabelButtonCancel.s
m_zLabelButtonDeactivate.s
EndStructure
Procedure.s CardError(code)
Select code
Case 0
ProcedureReturn "OK"
Case 1
ProcedureReturn "Abbruch durch Benutzer"
Case 2
ProcedureReturn "Kein Kartenleser"
Case 3
ProcedureReturn "Netzwerkfehler"
Case 4
ProcedureReturn "Karte gesperrt"
Case 5
ProcedureReturn "Nicht registriert"
Case 6
ProcedureReturn "Deaktiviert"
Case 10
ProcedureReturn "PC/SC Connect"
Case 11
ProcedureReturn "PC/SC Transmit"
Case 12
ProcedureReturn "Anwendungsauswahl"
Case 13
ProcedureReturn "Authentifikation"
Case 14
ProcedureReturn "Schlüsseländerung"
Case 15
ProcedureReturn "Erzeugen der Datendatei"
Case $10
ProcedureReturn "Lesen der Datendatei"
Case $11
ProcedureReturn "Schreiben der Datendatei"
Case $12
ProcedureReturn "Parameter"
Case $13
ProcedureReturn "Nicht initialisiert"
Case $3E8
ProcedureReturn "unbekannt"
Default
ProcedureReturn "Unbekannter Fehlercode"
EndSelect
EndProcedure
; <DllImport("oi32.dll")> _
; Public Shared Function OiChangePassword() As UInt32
; <DllImport("oi32.dll")> _
; Public Shared Function OiInitCard() As UInt32
; <DllImport("oi32.dll")> _
; Public Shared Function OiLogin(ByRef p_pcOiReqObj As COiReqObj, ByRef p_pcUserId As CMemRef, ByRef p_pcCardId As CMemRef, ByRef p_pcUnProtected As CMemRef, ByRef p_pcProtected As CMemRef) As UInt32
; <DllImport("oi32.dll")> _
; Public Shared Function OiReadFile(ByVal p_nFileId As Byte, ByRef p_pcData As CMemRef) As UInt32
; <DllImport("oi32.dll")> _
; Public Shared Function OiResetPassword() As UInt32
; <DllImport("oi32.dll")> _
; Public Shared Function OiWriteFile(ByVal p_nFileId As Byte, ByRef p_pcData As CMemRef) As UInt32
Prototype.l OiNew()
Prototype.l OiChangePassword()
Prototype.l OiInitCard()
;Damit hab ich noch Probleme
;Prototype.l OiLogin( p_pcOiReqObj.COiReqObj, p_pcUserId.CMemRef, p_pcCardId.CMemRef, p_pcUnProtected.CMemRef, p_pcProtected.CMemRef)
Prototype.l OiReadFile( p_nFileId.b, p_pcData)
Prototype.l OiResetPassword()
Prototype.l OiWriteFile(p_nFileId.b, p_pcData)
If OpenLibrary(0, "oi32.dll")
OiChangePassword.OiChangePassword= GetFunction(0, "OiChangePassword")
OiInitCard.OiInitCard=GetFunction(0,"OiInitCard")
; OiLogin.OiLogin=GetFunction(0,"OiLogin")
OiReadFile.OiReadFile=GetFunction(0,"OiReadFile")
OiResetPassword.OiResetPassword=GetFunction(0,"OiResetPassword")
OiWriteFile.OiWriteFile=GetFunction(0,"OiWriteFile")
Result=OiInitCard() ;initialisieren
Debug Result
ref2.CMemRef
ref2\m_pData = AllocateMemory($400)
ref2\m_nBufferLen = $400
Code=OiReadFile($11,@ref2)
Debug Code
If Code=0
Debug ref2\m_pData
Debug PeekS(ref2\m_pData) ;hier kommt der Text !
PokeB(ref2\m_pData,'P')
;wieder runterschreiben
Code=OiWriteFile($11,@ref2)
Else
Debug CardError(Code)
EndIf
Else
Debug "lib not found"
EndIf