سؤال

لنفترض أن بعض خدمات Windows تستخدم التعليمات البرمجية التي تريد محركات أقراص الشبكة المعينة ولا توجد مسارات UNC.كيف يمكنني جعل تعيين محرك الأقراص متاحًا لجلسة الخدمة عند بدء الخدمة؟لن يؤدي تسجيل الدخول كمستخدم الخدمة وإنشاء تعيين مستمر إلى إنشاء التعيين في سياق الخدمة الفعلية.

هل كانت مفيدة؟

المحلول

ستحتاج إما إلى تعديل الخدمة، أو تغليفها داخل عملية مساعدة:وبصرف النظر عن مشكلات الوصول إلى الجلسة/محرك الأقراص، تتم استعادة تعيينات محرك الأقراص الثابتة فقط عند تسجيل الدخول التفاعلي، وهو ما لا تقوم به الخدمات عادةً.

يمكن أن يكون نهج العملية المساعدة بسيطًا جدًا:ما عليك سوى إنشاء خدمة جديدة تقوم بتعيين محرك الأقراص وبدء الخدمة "الحقيقية".الأشياء الوحيدة التي ليست تافهة تمامًا في هذا الأمر هي:

  • ستحتاج الخدمة المساعدة إلى تمرير جميع أوامر SCM المناسبة (بدء/إيقاف، وما إلى ذلك) إلى الخدمة الحقيقية.إذا كانت الخدمة الحقيقية تقبل أوامر SCM مخصصة، فتذكر تمريرها أيضًا (لا أتوقع أن تستخدم خدمة تعتبر مسارات UNC غريبة مثل هذه الأوامر، بالرغم من ذلك...)

  • قد تصبح الأمور صعبة بعض الشيء من حيث الاعتماد.إذا كانت الخدمة الحقيقية تعمل ضمن حساب مستخدم عادي، فيمكنك تشغيل الخدمة المساعدة ضمن هذا الحساب أيضًا، ويجب أن يكون كل شيء على ما يرام طالما أن الحساب لديه حق الوصول المناسب إلى مشاركة الشبكة.إذا كانت الخدمة الحقيقية ستعمل فقط عند تشغيلها كنظام محلي أو شيء من هذا القبيل، فستصبح الأمور أكثر إثارة للاهتمام، لأنها إما لن تكون قادرة على "رؤية" محرك أقراص الشبكة على الإطلاق، أو تتطلب بعض شعوذة الاعتماد لتشغيل الأشياء.

نصائح أخرى

استخدام هذا على مسؤوليتك الخاصة.(لقد قمت باختباره على XP وServer 2008 x64 R2)

لهذا الاختراق سوف تحتاج SysinternalsSuite بواسطة مارك روسينوفيتش:

الخطوةالاولى:افتح موجه cmd.exe مرتفع (تشغيل كمسؤول)

الخطوة الثانية:ارفع مرة أخرى إلى الجذر باستخدام PSExec.exe:انتقل إلى المجلد الذي يحتوي على SysinternalsSuite وقم بتنفيذ الأمر التاليpsexec -i -s cmd.exeأنت الآن داخل الموجه nt authority\system ويمكنك إثبات ذلك عن طريق الكتابة whoami.ال -i هناك حاجة لأن تعيينات محرك الأقراص تحتاج إلى التفاعل مع المستخدم

الخطوة الثالثة:قم بإنشاء محرك الأقراص المعين المستمر كحساب النظام باستخدام الأمر التاليnet use z: \\servername\sharedfolder /persistent:yes

انه من السهل!

تحذير:يمكنك فقط إزالة هذا التعيين بنفس الطريقة التي أنشأته بها، من حساب النظام.إذا كنت بحاجة إلى إزالته، فاتبع الخطوتين 1 و2 ولكن قم بتغيير الأمر في الخطوة 3 إلى net use z: /delete.

ملحوظة:سيظهر الآن محرك الأقراص المعين الذي تم إنشاؤه حديثًا لجميع مستخدمي هذا النظام ولكنهم سيرونه معروضًا على أنه "Disconnected Network Drive (Z:)".لا تدع الاسم يخدعك.قد يدعي أنه تم قطع الاتصال ولكنه سيعمل من أجل الجميع.هذه هي الطريقة التي يمكنك من خلالها معرفة أن هذا الاختراق غير مدعوم بواسطة M$.

لقد وجدت حلاً مشابهًا للحل الموجود في psexec ولكنه يعمل بدون أدوات إضافية وينجو من إعادة التشغيل.

ما عليك سوى إضافة مهمة مجدولة، وإدراج "النظام" في الحقل "تشغيل كـ" وتوجيه المهمة إلى ملف دفعي باستخدام الأمر البسيط

net use z: \servername\sharedfolder /persistent:yes

ثم حدد "تشغيل عند بدء تشغيل النظام" (أو ما شابه ذلك، ليس لدي إصدار باللغة الإنجليزية) وبذلك تكون قد انتهيت.

وهناك طريقة أفضل سيكون لاستخدام ارتباط رمزي باستخدام mklink.exe. يمكنك فقط إنشاء ارتباط في نظام الملفات التي يمكن أن يستخدمها أي التطبيق. انظر http://en.wikipedia.org/wiki/NTFS_symbolic_link .

وهناك إجابة جيدة هنا: https://superuser.com/a/651015/299678

وأي بمعنى. يمكنك استخدام ارتباط رمزي، منها مثلا.

mklink /D C:\myLink \\127.0.0.1\c$

يمكنك استخدام أمر "net use":

var p = System.Diagnostics.Process.Start("net.exe", "use K: \\\\Server\\path");
var isCompleted = p.WaitForExit(5000);

إذا لم ينجح ذلك في إحدى الخدمات، فجرّب Winapi وPInvoc WNetAddConnection2

يحرر: من الواضح أنني أساءت فهمك - لا يمكنك تغيير الكود المصدري للخدمة، أليس كذلك؟في هذه الحالة سأتبع الاقتراح com.mdb, ، ولكن مع تطور بسيط:قم بإنشاء الخدمة الخاصة بك (دعنا نسميها خدمة التعيين) التي تقوم بتعيين محرك الأقراص وإضافة خدمة التعيين هذه إلى التبعيات للخدمة الأولى (العمل الفعلي).بهذه الطريقة لن تبدأ خدمة العمل قبل بدء خدمة التعيين (وتعيين محرك الأقراص).

وForcePush،

ملاحظة : لمحرك الأقراص المعين الذي تم إنشاؤه حديثا ستظهر الآن لجميع المستخدمين لهذا النظام ولكنها سوف نرى ذلك يظهر على شكل "قطع اتصال محرك أقراص شبكة الاتصال (Z :)". لا تدع الاسم يخدعك. قد يدعي أن تكون منفصلة ولكنها سوف تعمل لصالح الجميع. هذه هي الطريقة التي يمكن أن أقول لكم لا يتم اعتماد هذا الإختراق التي كتبها M $ ...

<القوي> كل هذا يتوقف على أذونات المشاركة. إذا كان لديك الجميع في أذونات المشاركة، وهذا محرك أقراص معين يمكن الوصول إليها من قبل مستخدمين آخرين. ولكن إذا كان لديك فقط بعض مستخدم معين الذي استخدمته في النص دفعة وتمت إضافة هذا السيناريو دفعة إلى البرامج النصية بدء التشغيل وثائق التفويض، وحساب النظام فقط الحصول على تلك الحصة ولا حتى المسؤول. حتى إذا كنت تستخدم، على سبيل المثال، يجب استخدام المقرر العمل ntbackuo، حساب النظام في "تشغيل ك '. إذا الخدمة الخاص بك "تسجيل الدخول باسم: حساب النظام المحلي. ينبغي أن تعمل

ما فعلت ، أو لم تقم بتعيين أي حرف محرك الأقراص في نصي لبدء التشغيل الخاص بي، فقط تستخدم net use \\\server\share ... وتستخدم مسار UNC في المهام المجدولة بلدي. أضاف النصي لتسجيل الدخول (أو مجرد إضافة ملف دفعي إلى مجلد بدء التشغيل) مع تعيين لنفس حصة مع بعض حرف محرك الأقراص: net use Z: \\\... مع نفس بيانات الاعتماد. الآن يمكن للمستخدم تسجيل يرى وصول تعيين محرك الأقراص. هناك 2 الاتصالات إلى مشاركة نفس. في هذه الحالة لا يرى المستخدم الذي مزعج "محرك أقراص شبكة الاتصال منقطع ...". ولكن إذا كنت حقا بحاجة الى الوصول الى تلك الحصة التي كتبها حرف محرك الأقراص وليس فقط UNC، الخريطة التي تشترك مع أحرف محركات الأقراص المختلفة، على سبيل المثال Y لنظام وZ للمستخدمين.

تم العثور على طريقة لمنح خدمة Windows حق الوصول إلى محرك أقراص الشبكة.

خذ Windows Server 2012 مع قرص NFS على سبيل المثال:

الخطوة 1:كتابة ملف دفعي للتثبيت.

كتابة ملف دفعي، على سبيل المثال:جيم:\mount_nfs.bat

echo %time% >> c:\mount_nfs_log.txt
net use Z: \\{your ip}\{netdisk folder}\ >> C:\mount_nfs_log.txt 2>&1

الخطوة 2:قم بتحميل القرص كـ NT AUTHORITY/SYSTEM.

افتح "برنامج جدولة المهام"، وقم بإنشاء مهمة جديدة:

  1. تشغيل كـ "SYSTEM"، في "بدء تشغيل النظام".
  2. إنشاء الإجراء:قم بتشغيل "C:\mount_nfs.bat".

بعد هاتين الخطوتين البسيطتين، تعمل خدمة Windows ActiveMQ الخاصة بي ضمن امتياز "النظام المحلي"، وتعمل بشكل مثالي دون تسجيل الدخول.

السبب وراء قدرتك على الوصول إلى محرك الأقراص عندما تقوم عادةً بتشغيل الملف القابل للتنفيذ من موجه الأوامر هو أنه عندما تقوم بتنفيذه كـ exe عادي، فإنك تقوم بتشغيل هذا التطبيق في حساب المستخدم الذي قمت بتسجيل الدخول منه.ويتمتع هذا المستخدم بامتيازات الوصول إلى الشبكة.ولكن، عند تثبيت الملف القابل للتنفيذ كخدمة، بشكل افتراضي، إذا رأيت في المهمة، يتم إدارته ضمن حساب "النظام".وربما تعلم أن "النظام" ليس لديه حقوق الوصول إلى موارد الشبكة.

يمكن أن يكون هناك حلان لهذه المشكلة.

  1. لتعيين محرك الأقراص بشكل مستمر كما سبق الإشارة إليه أعلاه.

  2. هناك نهج آخر يمكن اتباعه.إذا قمت بفتح مدير الخدمة عن طريق كتابة "services.msc" فيمكنك الانتقال إلى خدمتك وفي خصائص خدمتك توجد علامة تبويب تسجيل الدخول حيث يمكنك تحديد الحساب كأي حساب آخر غير "النظام" يمكنك أيضًا ابدأ الخدمة من حساب المستخدم الذي قمت بتسجيل الدخول إليه أو من خلال "خدمة الشبكة".عندما تفعل هذا ..يمكن للخدمة الوصول إلى أي مكون شبكة والقيادة حتى لو لم تكن مستمرة أيضًا.لتحقيق ذلك برمجيًا، يمكنك الاطلاع على وظيفة "CreateService" فيhttp://msdn.microsoft.com/en-us/library/ms682450(v=vs.85).aspx ويمكنه تعيين المعلمة "lpServiceStartName" على "NT AUTHORITY etworkService".سيؤدي هذا إلى بدء خدمتك ضمن حساب "خدمة الشبكة" وبعد ذلك تنتهي.

  3. يمكنك أيضًا محاولة جعل الخدمة تفاعلية عن طريق تحديد SERVICE_INTERACTIVE_PROCESS في علامة معلمة نوع الخدمة لوظيفة CreateService() الخاصة بك ولكن هذا سيكون محدودًا فقط حتى XP حيث لا يدعم Vista و7 هذه الميزة.

أتمنى أن تفيدك الحلول ..اسمحوا لي أن أعرف إذا كان هذا يعمل بالنسبة لك.

وأنت wan't إما تغيير المستخدم الذي يتم تشغيل الخدمة تحت من "النظام" أو ايجاد وسيلة متستر لتشغيل التعيين كنظام.

والشيء الغريب هو أن هذا ممكن باستخدام "في" القيادة ، ببساطة جدولة تعيين محرك الأقراص الخاصة بك دقيقة واحدة في المستقبل، وسيتم تشغيله تحت حساب النظام يجعل من القيادة مرئية لخدمتكم.

وبدلا من الاعتماد على محرك أقراص الثابتة، هل يمكن تعيين نصي لتعيين / unmap محرك الأقراص في كل مرة تستخدم فيه:

net use Q: \\share.domain.com\share 
forfiles /p Q:\myfolder /s /m *.txt /d -0 /c "cmd /c del @path"
net use Q: /delete

وهذا يعمل بالنسبة لي.

لا أستطيع التعليق بعد (العمل على سمعة) ولكن إنشاء حساب فقط للإجابة علىTech الهزة @ spankmaster79 (اسم لطيف لول) والقضاياNMC وذكرت أنها ردا على "وجدت حلا مشابهة لل واحد مع psexec لكن يعمل بدون أدوات إضافية ويبقى إعادة تشغيل ". وكان آخرLarry بها.

والحل لهذا هو لتصفح فقط إلى هذا المجلد من داخل دخوله في الحسبان، أي:

    \\servername\share  

ووالسماح لها موجه للدخول، وإدخال بيانات الاعتماد نفسها التي استخدمتها لUNC في psexec. وبعد ذلك يبدأ العمل. في حالتي، وأنا أعتقد أن هذا هو لأن الخادم مع الخدمة ليست عضوا في نفس المجال مثل ملقم أنا رسم خرائط ل. أنا أفكر إذا كان UNC والمهمة المجدولة كلا الرجوع إلى IP بدلا من اسم المضيف

    \\123.456.789.012\share 

وقد تجنب المشكلة تماما.

إذا كنت من أي وقت مضى الحصول على نقاط مندوب يكفي هنا سأضيف هذا كرد بدلا من ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top