Какой-то дикий трэшъ и угаръ в этой теме происходит... А какого хрена вы пытаетесь использовать класс ProcessImageFileName? Он возвращает имя файла в Native-формате, а не в классическом DOS-виде.
x64 прав, нужно будет конвертировать в нормальный формат(не \Device\Floppy0\ или \Device\HarddiskVolume1), если необходимо конвертить в дос имя. У меня есть некий древний код: Код (Text): ConvertVolumeNameToDosName proc uses ebx VolumeName:PUNICODE_STRING, ResultDosName:PULONG Local SymbolicLinkHandle:HANDLE Local DeviceMap:PROCESS_DEVICEMAP_INFORMATION Local ObjAttr:OBJECT_ATTRIBUTES Local DosName:UNICODE_STRING Local DosNameBuffer[4]:BYTE Local LinkName:UNICODE_STRING Local LinkNameBuffer[MAX_PATH]:BYTE invoke ZwQueryInformationProcess, NtCurrentProcess, ProcessDeviceMap, addr DeviceMap, SizeOf PROCESS_DEVICEMAP_INFORMATION, NULL test eax,eax jnz exit_ mov ObjAttr.uLength,SizeOf OBJECT_ATTRIBUTES mov ObjAttr.hRootDirectory,eax mov ObjAttr.pSecurityDescriptor,eax mov ObjAttr.pSecurityQualityOfService,eax mov ObjAttr.pObjectName,OffSet DirectoryName mov ObjAttr.uAttributes,eax invoke ZwOpenDirectoryObject, addr ObjAttr.hRootDirectory, DIRECTORY_QUERY, addr ObjAttr test eax,eax jnz exit_ lea ecx,DosName mov ObjAttr.pObjectName,ecx lea edx,DosNameBuffer mov DosName.Buffer,edx lea eax,LinkNameBuffer mov LinkName.Buffer,eax mov dword ptr DosName,65536*4 or 4 mov LinkName.MaximumLength,MAX_PATH xor ebx,ebx loop_: bt DeviceMap.DriveMap,ebx jnc next_volume_ lea eax,[ebx+'A'+':'*65536] mov dword ptr DosNameBuffer,eax invoke ZwOpenSymbolicLinkObject, addr SymbolicLinkHandle, SYMBOLIC_LINK_QUERY, addr ObjAttr test eax,eax jnz err_open_ invoke ZwQuerySymbolicLinkObject, SymbolicLinkHandle, addr LinkName, NULL push eax invoke ZwClose, SymbolicLinkHandle pop eax test eax,eax jnz next_volume_ invoke RtlCompareUnicodeString, VolumeName, addr LinkName, TRUE test eax,eax jz err_open_ next_volume_: inc ebx cmp ebx,32 jc loop_ mov eax,STATUS_OBJECT_NAME_NOT_FOUND err_open_: push eax invoke ZwClose, ObjAttr.hRootDirectory pop eax .if !Eax mov edx,ResultDosName mov dword ptr [edx],ebx .endif exit_: ret align 16 DirectoryNameWide WCHAR "\","?","?" DirectoryName UNICODE_STRING <SizeOf DirectoryNameWide, SizeOf DirectoryNameWide, OffSet DirectoryNameWide> ConvertVolumeNameToDosName endp ConvertVolumeToDosFileName proc uses ebx esi edi VolumeFileName:PUNICODE_STRING, DosFileName:PUNICODE_STRING Local LocalVolumeName:UNICODE_STRING Local DosName:ULONG mov edi,VolumeFileName mov ax,'\' mov edi,UNICODE_STRING.Buffer[edi] cld mov LocalVolumeName.Buffer,edi mov ecx,MAX_PATH*2 lea edi,[edi + 8*2] ;\Device\* mov edx,edi repne scasw ;\Device\Floppy0\* mov ecx,edi sub ecx,edx ;Length add ecx,8*2 - 2 mov esi,edi mov LocalVolumeName._Length,cx mov LocalVolumeName.MaximumLength,cx invoke ConvertVolumeNameToDosName, addr LocalVolumeName, addr DosName test eax,eax cld jnz exit_ xor eax,eax mov ecx,MAX_PATH repne scasw mov eax,STATUS_INVALID_PARAMETER jne exit_ mov eax,MAX_PATH mov edx,DosFileName assume edx:PUNICODE_STRING sub eax,ecx dec eax mov ebx,eax lea ecx,[eax*2 + 2*3 + 2] cmp UNICODE_STRING.MaximumLength[edx],cx mov eax,STATUS_BUFFER_TOO_SMALL jc exit_ sub ecx,2 mov edi,[edx].Buffer mov eax,DosName mov [edx]._Length,cx add eax,'A' mov word ptr [edi+4],'\' or eax,':'*65536 mov ecx,ebx mov dword ptr [edi],eax lea edi,[edi+6] rep movsw mov word ptr [edi],cx xor eax,eax exit_: ret ConvertVolumeToDosFileName endp QueryProcessImageFileName proc ProcessHandle:HANDLE, FileName:PUNICODE_STRING Local Buffer[MAX_PATH]:WCHAR invoke ZwQueryInformationProcess, ProcessHandle, ProcessImageFileName, addr Buffer, MAX_PATH*2, NULL .if !Zero? invoke ConvertVolumeToDosFileName, addr Buffer, FileName .endif ret QueryProcessImageFileName endp
shchetinin Ваши наркоманские намёки не катят. Что значит: Даже мне не понятно. Какие есчо логи ?? О чём вы говорите!?
Блин нельзя возврощать указатель на память размещенную на стеки что опять не понятно? что за припораты вы принимаете ? наверное Debug логи ... Блин сильное вы что то принимаете ...