ورود

View Full Version : سوال: تشخیص 32 بیت با 64 بیت بودن برنامه+گرفتن آدرس



AbbasVB
شنبه 12 بهمن 1392, 13:03 عصر
سلام
دوستان چه طور میشه فهمید که یک برنامه ای که در حال اجراست بفهمیم که برنامه 64Bit است یا 32Bit
و اگر 64 بیت بود چه طور با داشتن PId یا هندل پروسه آدرس اون رو به دست بیاریم
ممنون

program2vb
شنبه 12 بهمن 1392, 19:53 عصر
سلام



Print Environ("Path")
Print Environ("FP_NO_HOST_CHECK")
Print Environ("NUMBER_OF_PROCESSORS")
Print Environ("OS")
Print Environ("Path")
Print Environ("PATHEXT")
Print Environ("PROCESSOR_ARCHITECTURE")
Print Environ("PROCESSOR_IDENTIFIER")
Print Environ("PROCESSOR_LEVEL")
Print Environ("PROCESSOR_REVISION")
Print Environ("PSModulePath")
Print Environ("TEMP")
Print Environ("TMP")
Print Environ("USERNAME")
Print Environ("VS100COMNTOOLS")
Print Environ("windir")
Print Environ("windows_tracing_flags")
Print Environ("windows_tracing_logfile")

meys34
شنبه 12 بهمن 1392, 22:56 عصر
این قسمت اول سواتون:

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function IsWow64Process Lib "kernel32" (ByVal hProc As Long, ByRef bWow64Process As Boolean) As Long
Private Const PROCESS_QUERY_INFORMATION = &H400

Private Function Is64Bit(ByVal PID As Long) As Boolean
Dim hProc As Long
Dim a As Boolean, b As Boolean

hProc = OpenProcess(PROCESS_QUERY_INFORMATION, 0&, PID)

IsWow64Process hProc, a
IsWow64Process -1, b

Is64Bit = a Xor b

CloseHandle hProc
End Function

دنبال سوال دومتون هم میگردم اگر پیدا کردم میزارم سورسش رو...

AbbasVB
سه شنبه 22 بهمن 1392, 12:33 عصر
درود
با تشکر از meys34 (http://barnamenevis.org/member.php?72486-meys34) کد شما به دردم خورد البته تغییرش دادم
برای به دست آوردن آدرس پروسه های 64 بیتی با دو ای پی آی GetModuleFileName , GetModuleFileNameExA نمی شود کاری کرد
طی جستجو هام به یه API بر خوردم که به احتمالا جزو توابع مستند نشده می باشد(:کف:)NtQueryInformationProcess
متاسفانه هر کاری کردم نشد از این تابع استفاده کنم
یه نمونه استفاده اش رو توی پروژه Process Hacker که متن باز هم هست پیدا کردم
ولی چون با C++‎‎‎ بود اینقدر پیچیده که سر در نیاوردم
نمونه ای هم ازش توی نت نبود
حالا با این تفسیر کسی می تونه کمک کنه؟

meys34
سه شنبه 22 بهمن 1392, 18:04 عصر
اینجا هست... پست شماره 10:
VB6-GetModuleFileNameEx-for-64-bit-files (http://www.vbforums.com/showthread.php?620349-RESOLVED-VB6-GetModuleFileNameEx-for-64-bit-files&p=3927949&viewfull=1#post3927949)

تابعی که خود msdn پیشنهاد داده GetProcessImageFileName هست... ولی یه مشکلی که داره خروجیش به شکل زیر هست:

\Device\Harddisk0\Partition1\Windows\System32\Ctyp e.nls
به جای اینکه به این شکل باشه:

C:\Windows\System32\Ctype.nls

با استفاده از تابع QueryDosDevice آدرس \Device\Harddisk0\Partition1\ رو میشه به این C:\ تبدیل کرد...
(البته به روش غیر مستقیم و کلی دردسر...)

AbbasVB
چهارشنبه 23 بهمن 1392, 19:16 عصر
اینجا هست... پست شماره 10:
VB6-GetModuleFileNameEx-for-64-bit-files (http://www.vbforums.com/showthread.php?620349-RESOLVED-VB6-GetModuleFileNameEx-for-64-bit-files&p=3927949&viewfull=1#post3927949)

تابعی که خود msdn پیشنهاد داده GetProcessImageFileName هست... ولی یه مشکلی که داره خروجیش به شکل زیر هست:

\Device\Harddisk0\Partition1\Windows\System32\Ctyp e.nls
به جای اینکه به این شکل باشه:

C:\Windows\System32\Ctype.nls

با استفاده از تابع QueryDosDevice آدرس \Device\Harddisk0\Partition1\ رو میشه به این C:\ تبدیل کرد...
(البته به روش غیر مستقیم و کلی دردسر...)

ممنون
این روش شما به کار من نمیاد
ولی کسی راه دیگه ای سراغ نداره؟
اگر با همون API که گفتم بشه کاریش کرد خوب می شه
چون این API مستند نشده نمونه ای ازش گیر نمیاد حداقل با وی بی 6 با C یکی دو نمونه پیدا کردم ولی راست کارم نیست