Another sign to myself that I'm developing dyslexia. ebp-150 isn't used anywhere. Eh, oh well.
Anyhow, I did some more work on figuring this out. And woo, I've got a full copy of IDA now. ^_^
.text:10002B89 ; int __cdecl GetExeInfo(LPCSTR lpcstr_exepath,LPCSTR lpcstr_return)
.text:10002B89 GetExeInfo proc near ; CODE XREF: CheckRevision+38p
.text:10002B89
.text:10002B89 FileTime = FILETIME ptr -150h
.text:10002B89 SystemTime = _SYSTEMTIME ptr -10h
.text:10002B89 lpcstr_exepath = dword ptr 8
.text:10002B89 lpcstr_return = dword ptr 0Ch
.text:10002B89
.text:10002B89 push ebp
.text:10002B8A mov ebp, esp
.text:10002B8C sub esp, 150h
.text:10002B92 push esi
.text:10002B93 mov esi, [ebp+lpcstr_return] ; From here on, ESI points to lpcstr_return
.text:10002B96 lea eax, [ebp+FileTime]
.text:10002B9C push edi
.text:10002B9D and byte ptr [esi], 0
.text:10002BA0 push eax ; LPWIN32_FIND_DATA
.text:10002BA1 push [ebp+lpcstr_exepath] ; exe path
.text:10002BA4 call ds:FindFirstFileA ;
.text:10002BA4 ; This chunk of code gets a handle to the EXE,
.text:10002BA4 ; moves it to EDI, and then makes sure that it
.text:10002BA4 ; actually exists
.text:10002BA4 ;
.text:10002BA4 ; Also, the second argument of FindFirstFile will
.text:10002BA4 ; become a reference to a WIN32_FIND_DATA struct,
.text:10002BA4 ; and [ptr+4] is "FILETIME ftCreationTime".
.text:10002BA4 ;
.text:10002BAA mov edi, eax
.text:10002BAC cmp edi, 0FFFFFFFFh
.text:10002BAF jz short loc_10002C10
.text:10002BB1 lea eax, [ebp+SystemTime]
.text:10002BB4 push eax
.text:10002BB5 lea eax, [ebp-13Ch] ; Pointer to the FILETIME struct, obtained from FindFirstFile
.text:10002BBB push eax
.text:10002BBC call ds:FileTimeToSystemTime ; This assigns [ebp+SystemTime] to the proper value.
.text:10002BC2 movzx eax, [ebp+SystemTime.wSecond]
.text:10002BC6 push dword ptr [ebp-130h] ; This apparently is the length of the EXE file
.text:10002BCC and byte ptr [ebp-105h], 0
.text:10002BD3 push eax
.text:10002BD4 movzx eax, [ebp+SystemTime.wMinute]
.text:10002BD8 push eax
.text:10002BD9 movzx eax, [ebp+SystemTime.wHour]
.text:10002BDD push eax
.text:10002BDE push 64h
.text:10002BE0 movzx eax, [ebp+SystemTime.wYear]
.text:10002BE4 cdq
.text:10002BE5 pop ecx
.text:10002BE6 idiv ecx
.text:10002BE8 movzx eax, [ebp+SystemTime.wDay]
.text:10002BEC push edx
.text:10002BED push eax
.text:10002BEE movzx eax, [ebp+SystemTime.wMonth]
.text:10002BF2 push eax
.text:10002BF3 lea eax, [ebp-124h] ; This points to a string specifing the exe name.
.text:10002BF3 ; Example: starcraft.exe
.text:10002BF9 push eax
.text:10002BFA push offset aS02u02u02u02u0 ; "%s %02u/%02u/%02u %02u:%02u:%02u %u"
.text:10002BFF push esi ; This is where the string is returned to
.text:10002BFF ; Note: This points to [ebp+lpcstr_return]
.text:10002C00 call ds:wsprintfA ;
.text:10002C00 ; return wsprintf(esi,
.text:10002C00 ; "%s %02u/%02u/%02u %02u/%02u/%02u %u", [ebp-124h],
.text:10002C00 ; wMonth, wDay, wYear % 100, wHour, wMinute,
.text:10002C00 ; wSecond, dword ptr [ebp-130h])
.text:10002C00 ;
.text:10002C00 ; starcraft.exe MO/DY/YR HR:MN:SC size
.text:10002C00 ;
.text:10002C06 add esp, 28h
.text:10002C09 push edi
.text:10002C0A call ds:FindClose
.text:10002C10
.text:10002C10 loc_10002C10: ; CODE XREF: GetExeInfo+26j
.text:10002C10 pop edi
.text:10002C11 pop esi
.text:10002C12 leave
.text:10002C13 retn
.text:10002C13 GetExeInfo endp