كيف يمكنني تحديد ما إذا كان هناك ملف معين مفتوح في نظام التشغيل Windows؟[مغلق]
-
08-06-2019 - |
سؤال
إحدى أدواتي المفضلة لنظام التشغيل Linux هي lsof - سكين الجيش السويسري الحقيقي!
وجدت نفسي اليوم أتساءل عن البرامج الموجودة على نظام WinXP والتي تحتوي على ملف معين مفتوح.هل هناك أي فائدة مكافئة لـ lsof؟بالإضافة إلى ذلك، كان الملف المعني عبر مشاركة عبر الشبكة، لذا لست متأكدًا مما إذا كان ذلك يزيد الأمور تعقيدًا.
المحلول
يستخدم عملية المستكشف من Sysinternals Suite، ستتيح لك وظيفة Find Handle أو DLL البحث عن العملية مع فتح هذا الملف.
نصائح أخرى
أي ما يعادل lsof -p pid
هو الناتج المدمج من مقبض sysinternals وlistdlls، أي
handle -p pid
listdlls -p pid
يمكنك معرفة معرف المنتج باستخدام sysinternals pslist
.
يعادل واحد lsof يمكن دمج المخرجات من Sysinternals مقبض و listdlls, ، أي.:
c:\SysInternals>handle
[...]
------------------------------------------------------------------------------
gvim.exe pid: 5380 FOO\alois.mahdal
10: File (RW-) C:\Windows
1C: File (RW-) D:\some\locked\path\OpenFile.txt
[...]
c:\SysInternals>listdlls
[...]
------------------------------------------------------------------------------
Listdlls.exe pid: 6840
Command line: listdlls
Base Size Version Path
0x00400000 0x29000 2.25.0000.0000 D:\opt\SysinternalsSuite\Listdlls.exe
0x76ed0000 0x180000 6.01.7601.17725 C:\Windows\SysWOW64\ntdll.dll
[...]
c:\SysInternals>listdlls
لسوء الحظ، يجب عليك "التشغيل كمسؤول" لتتمكن من استخدامها.
أيضًا listdlls و مقبض لا تنتج نموذجًا يشبه الجدول المستمر، لذا فإن تصفية اسم الملف ستؤدي إلى إخفاء PID. findstr /c:pid: /c:<filename>
يجب أن يجعلك قريبًا جدًا من كلتا الخدمتين، بالرغم من ذلك
c:\SysinternalsSuite>handle | findstr /c:pid: /c:Driver.pm
System pid: 4 \<unable to open process>
smss.exe pid: 308 NT AUTHORITY\SYSTEM
avgrsa.exe pid: 384 NT AUTHORITY\SYSTEM
[...]
cmd.exe pid: 7140 FOO\alois.mahdal
conhost.exe pid: 1212 FOO\alois.mahdal
gvim.exe pid: 3408 FOO\alois.mahdal
188: File (RW-) D:\some\locked\path\OpenFile.txt
taskmgr.exe pid: 6016 FOO\alois.mahdal
[...]
هنا يمكننا أن نرى أن gvim.exe هو الذي يفتح هذا الملف.
يحاول أونلوكر.
يحتوي موقع أونلوكر على مخطط أنيق (قم بالتمرير لأسفل بعد اتباع الرابط) يعرض مقارنة بالأدوات الأخرى.من الواضح أن مثل هذه المقارنات عادة ما تكون متحيزة نظرًا لأنها عادةً ما تكون مكتوبة بواسطة مؤلف الأداة، ولكن الرسم البياني على الأقل يسرد البدائل بحيث يمكنك تجربتها بنفسك.
إذا كان الملف .dll فيمكنك استخدام الملف قائمة المهام تطبيق سطر الأوامر لمعرفة من قام بفتحه:
TaskList /M nameof.dll
إذا نقرت بزر الماوس الأيمن على أيقونة "الكمبيوتر" (أو "جهاز الكمبيوتر") واخترت "إدارة" من القائمة المنبثقة، فسينقلك ذلك إلى وحدة تحكم إدارة الكمبيوتر.
هناك، ضمن أدوات النظام\المجلدات المشتركة، ستجد "فتح الملفات".من المحتمل أن يكون هذا قريبًا مما تريده، ولكن إذا كان الملف موجودًا على مشاركة عبر الشبكة، فستحتاج إلى القيام بنفس الشيء على الخادم الذي يوجد عليه الملف.
يوجد برنامج "OpenFiles" يبدو أنه جزء من نظام التشغيل Windows 7.ويبدو أنه يمكن أن تفعل ما تريد.يمكنه سرد الملفات التي فتحها المستخدمون عن بُعد (من خلال مشاركة الملف) ، وبعد استدعاء "OpenFiles /Local ON" وإعادة تشغيل النظام ، يجب أن يكون قادرًا على عرض الملفات المفتوحة محليًا.ويقال أن الأخير لديه عقوبات الأداء.
استخدم Process Explorer للعثور على معرف العملية.ثم استخدام مقبض لمعرفة الملفات المفتوحة.
على سبيل المثال مقبض -p
يعجبني هذا الأسلوب لأنك تستخدم أدوات مساعدة من Microsoft نفسها.
في عرض الملفات المفتوحة, ، ضمن قائمة الخيارات، يوجد عنصر قائمة يسمى "إظهار ملفات الشبكة".ربما مع تمكين ذلك، تكون الأداة المذكورة أعلاه ذات فائدة معينة.