بتـــــاريخ : 2/26/2011 1:31:03 AM
الفــــــــئة
  • الحـــــــــــاسب
  • التعليقات المشاهدات التقييمات
    0 872 0


    نظره على دوال Native API

    الناقل : elmasry | العمر :42 | الكاتب الأصلى : tmaaa | المصدر : www.arabteam2000-forum.com

    كلمات مفتاحية  :
    نظره دوال Native API

    السلام عليكم
    تنويه :
    هذا الموضوع فقط للترويح عن النفس من الوضع الحالي ومحاولة تناسي التعاسة و التشاؤم الذي نعيشه بسبب ...

    وجدت نفسي في قمة الملل كل كم دقيقة اعمل refresh لموقع الفريق العربي لعل وعسى اجد ما يزيل الضجر و الملل الذي انا فيه فلم اجد ما يرضي ذلك الانسان المعقد ...
    أمامي كتاب Windows NT/2000 Native API , نظرت لواجهة الكتاب مرات ومرات و بعدها قررت افتح الكتاب و انتقي دالة بصورة عشوائية لاطبق عليها مثالاً (طبعا انتقيت الاسهل حتى لا اقلق دماغي بطلامس كثيرة )...
    الدالة ZwPowerInformation من الاسم يمكن نعرف شئ عنها ... وظيفتها الحصول ( تغيير ) على ( في ) معلومات الـ Power ..
    تصريح الدالة حسب ذلك المرجع كالآتي

    NTSYSAPI
    NTSTATUS
    NTAPI
    ZwPowerInformation(
            IN POWER_INFORMATION_LEVEL PowerInformationLevel,
            IN PVOID InputBuffer OPTIONAL,
            IN ULONG InputBufferLength,
            OUT PVOID OutputBuffer OPTIONAL,
            IN ULONG OutputBuffer
    );

    بالرجوع للكتاب يمكن معرفة ماذا يعني كل parameter مذكور في تصريح الدالة ...
    التصريح المقابل بالدلفي :
    function NtPowerInformation(
       PowerInformationLevel:TPowerInformationLevel;
       InputBuffer:Pointer;
       InputBufferLength:ULONG;
       OutputBuffer:Pointer;
       OutputBufferLength:ULONG
       ):NTSTATUS; stdcall external 'ntdll.dll' name 'NtPowerInformation';

    المعلومات التي يمكن الحصول عليها او تغييرها متعددة ويتم تحديد احداها باسناد القيمة التابعه لها لـ PowerInformationLevel و هذا عبارة عن enum حسب التعريف في لغة السي اما في الدلفي فنعرفه كالأتي
    TPowerInformationLevel=( SystemPowerPolicyAc,
      SystemPowerPolicyDc,
      VerifySystemPolicyAc,
      VerifySystemPolicyDc,
      SystemPowerCapabilities,
      SystemBatteryState,
      SystemPowerStateHandler,
      ProcessorStateHandler,
      SystemPowerPolicyCurrent,
      AdministratorPowerPolicy,
      SystemReserveHiberFile,
      ProcessorInformation,
      SystemPowerInformation
      );
    POWER_INFORMATION_LEVEL =TPowerInformationLevel;
    PPowerInformationLevel =^TPowerInformationLevel;

    وبعد نظرة سريعة على هذه الانواع قررت اختيار ProcessorInformation لأضيع من وقتي كم دقيقة ..
    تعريف التركيب كالآتي :
     TProcessorPowerInformation = record
        Number,
        MaxMhz,
        CurrentMhz,
        MhzLimit,
        MazIdleState,
        CurrentIdleStatr:ULONG
      end;
       PProcessorPowerInformation=^TProcessorPowerInformation;
       PROCESSOR_POWER_INFORMATION=TProcessorPowerInformation;
       PPROCESSOR_POWER_INFORMATION=^TProcessorPowerInformation;

    وكمثال بسيط على الدالة اضع جزء من الكود
    var
    ProcessorInfo:TProcessorPowerInformation;
    res:NTSTATUS;
    begin
        ZeroMemory( @ProcessorInfo,sizeof( TProcessorPowerInformation));
        res:=NtPowerInformation(ProcessorInformation,nil,0,@ProcessorInfo,sizeof(TProcessorPowerInformation));

        if res=0 then
    // do what you want here
    end;

    بعد تنفيذ مثال على الدالة وجدت ان قيمة MaxMhz وCurrentMhz و MhzLimited للـ processor للكمبيوتر الذي استعمله هي 2019 Mhz. طبعاً عند الاطلاع على معلومات الـ Processor وجدت ان الويندوز اعطت القيمة 2.02 Ghz

    أثناء كتابتي للموضوع كان يحادثني أحد أعز الزملاء وقبل ان ينتهي حديثنا قلت له : " الحل , أن ننتقل لكوكب أخر ... "

    وهأنذا أعود للوحدة و الملل أمام الصديق الصامت المتكلم " الكمبيوتر "....

    CIONO1

    كلمات مفتاحية  :
    نظره دوال Native API

    تعليقات الزوار ()