Author | Message | Time |
---|---|---|
Ringo | Can anyone please explain how battle.net's "FILETIME" works? After downloading tos_usa.txt from BNFTP and copying the file time in the responce packet, im not sure what to do next. Iv tryed converting it to a number of differnt time structures, but non of them match the one in the packet. any ideas? [code] Packet = 00 DF 77 0F 6C E8 C0 01 Packet High = 29419628 Packet Low = 259514112 CreateFile() = 676 GetFileTime() = 1 1 High = 29761120 1 Low = 256759730 1 B2 D7 4D 0F 60 1E C6 01 2 High = 29761120 2 Low = -1052582566 2 5A DD 42 C1 60 1E C6 01 3 High = 29761120 3 Low = 396134730 3 4A 89 9C 17 60 1E C6 01 Private Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type Private Declare Function GetFileTime Lib "kernel32" _ (ByVal hFile As Long, _ lpCreationTime As FILETIME, _ lpLastAccessTime As FILETIME, _ lpLastWriteTime As FILETIME) As Long Private Declare Function CreateFileA Lib "kernel32" _ (ByVal lpFileName As String, _ ByVal dwDesiredAccess As Long, _ ByVal dwShareMode As Long, _ lpSecurityAttributes As Long, _ ByVal dwCreationDisposition As Long, _ ByVal dwFlagsAndAttributes As Long, _ ByVal hTemplateFile As Long) As Long Private Declare Function CloseHandle Lib "kernel32" _ (ByVal hObject As Long) As Long Private Const GENERIC_WRITE = &H40000000 Private Const OPEN_EXISTING = 3 Private Const FILE_SHARE_READ = &H1 Private Const FILE_SHARE_WRITE = &H2 Private Const FO_DELETE = &H3 Public Sub FuckingFile() Dim Ft1 As FILETIME Dim Ft2 As FILETIME Dim Ft3 As FILETIME Dim R&, hdl& Ft1 = GetQWORD(HexToStr("00 DF 77 0F 6C E8 C0 01")) Debug.Print "Packet = " & StrToHex(MakeQWORD(Ft1)) Debug.Print "Packet High = " & Ft1.dwHighDateTime Debug.Print "Packet Low = " & Ft1.dwLowDateTime Debug.Print " " hdl = CreateFileA(App.Path & "\tos_usa.txt", GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0) Debug.Print "CreateFile() = " & hdl Debug.Print " " R = GetFileTime(hdl, Ft1, Ft2, Ft3) Debug.Print "GetFileTime() = " & R Debug.Print "1 High = " & Ft1.dwHighDateTime Debug.Print "1 Low = " & Ft1.dwLowDateTime Debug.Print "1 " & StrToHex(MakeQWORD(Ft1)) Debug.Print "2 High = " & Ft2.dwHighDateTime Debug.Print "2 Low = " & Ft2.dwLowDateTime Debug.Print "2 " & StrToHex(MakeQWORD(Ft2)) Debug.Print "3 High = " & Ft3.dwHighDateTime Debug.Print "3 Low = " & Ft3.dwLowDateTime Debug.Print "3 " & StrToHex(MakeQWORD(Ft3)) Call CloseHandle(hdl) End Sub Private Function GetQWORD(Data As String) As FILETIME CopyMemory GetQWORD, ByVal Data, 8 End Function Private Function MakeQWORD(F As FILETIME) As String MakeQWORD = String(8, 0) CopyMemory ByVal MakeQWORD, F, 8 End Function Public Function StrToHex(ByVal Data As String, Optional Splitter As String = " ") As String For i = 1 To Len(Data) StrToHex = StrToHex & Right("00" & Hex(Asc(Mid(Data, i, 1))), 2) & Splitter Next i End Function Public Function HexToStr(ByVal Data As String) As String For i = 1 To Len(Data) Step 3 HexToStr = HexToStr & Chr("&H" & Mid(Data, i, 2)) Next i End Function [/code] [EDIT]: Oh... I just tryed SetFileTime() and its all good! I spose that how its ment to be done after downloading and creating the file? [code] Ft3 = GetQWORD(HexToStr("00 DF 77 0F 6C E8 C0 01")) R = SetFileTime(hdl, Ft1, Ft2, Ft3) Debug.Print "SetFileTime() = " & R Debug.Print "1 High = " & Ft1.dwHighDateTime Debug.Print "1 Low = " & Ft1.dwLowDateTime Debug.Print "1 " & StrToHex(MakeQWORD(Ft1)) Debug.Print "2 High = " & Ft2.dwHighDateTime Debug.Print "2 Low = " & Ft2.dwLowDateTime Debug.Print "2 " & StrToHex(MakeQWORD(Ft2)) Debug.Print "3 High = " & Ft3.dwHighDateTime Debug.Print "3 Low = " & Ft3.dwLowDateTime Debug.Print "3 " & StrToHex(MakeQWORD(Ft3)) Call CloseHandle(hdl) [/code] gave me: [code] SetFileTime() = 1 1 High = 29761120 1 Low = 256759730 1 B2 D7 4D 0F 60 1E C6 01 2 High = 29761120 2 Low = -1052582566 2 5A DD 42 C1 60 1E C6 01 3 High = 29419628 3 Low = 259514112 3 00 DF 77 0F 6C E8 C0 01 [/code] | January 21, 2006, 10:24 AM |
Myndfyr | [quote author=Ringo link=topic=13971.msg142632#msg142632 date=1137839054] [code] Public Sub FuckingFile() [/code] [/quote] ROFL | January 21, 2006, 6:30 PM |