سؤال

هل من الممكن استبدال نظام التشغيل Mac OS X نافذة تسجيل الدخول, /System/Library/CoreServices/loginwindow.التطبيق مخصص نافذة تسجيل الدخول إلى التطبيق ؟ (رؤية عقلانية للقيام بذلك.)

أخشى أن الكاكاو مهارات البرمجة هي بدائية.أجد أنه من المثير للاهتمام أنه عند تشغيل مسبار CGSession (وهو وهو غير الشرعيين الأداة التي ينفذ التبديل السريع بين المستخدمين) لمعرفة ما هي الوظائف التي يستخدمها ، عن طريق القيام

nm -mg /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession

أن واحدة من ربط الوظيفة:

(undefined [lazy bound]) external _CGSCreateLoginSession (from ApplicationServices)

لم أجد الوثائق على ApplicationServices الإطار.وأظن أنا الحصول على عمق مزود خدمة واجهات بدلا من مبرمج التطبيق واجهات.

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

#include "CGSInternal.h"

int main (int argc, const char * argv[]) {
    // switch to the login window
    CGSCreateLoginSession(NULL);

    return 0;
}

وأغتنم CG يعني CoreGraphics, و لا أفهم ما الذي يجب أن تفعله مع تسجيل الدخول (ما عدا ربما مع وضع مربع حوار تسجيل الدخول على المستخدم الحالي العمل).

حتى إذا كان من غير الممكن تحقيق استبدال نافذة تسجيل الدخول, سأكون مهتما لمعرفة ما يمكن القيام به على طول هذه الخطوط (من قبل الناس الذين لا عمل أبل).

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

المحلول

نافذة تسجيل الدخول التطبيق بأنها جزء من التكوين في launchd /System/Library/LaunchDaemons/com.أبل.loginwindow.plist.

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

لقد جمعت تطبيق المكالمات CGSCreateLoginSession و بمجرد تشغيله الانتقال إلى نافذة تسجيل الدخول عن طريق تدوير المكعب.أتصور أن هذا هو السبب في أنه يتطلب CoreGraphics - انها مجرد رسومات وظيفة المكالمات الخروج في نهاية المطاف.

هل يمكن أن محاولة InputManager ونرى ذلك نافذة الدخول الأحمال رمز -> إذا كان لا يمكنك تغيير loginwindow بنك الاستثمار القومي (LoginWindowUI.بنك الاستثمار القومي) و إضافة بعض الأزرار لعرض نافذة جديدة مع المتصفح المستخدم.عندما يختار الطالب صورة له نفسه يمكن أن التدوين الآلي حقول اسم المستخدم وكلمة المرور في loginwindow.

عقدة هذا هو كل نظرية ، ويبدو جدا هشة وغير آمنة.

حظا سعيدا.

في وقت لاحق تحرير

يرجى ملاحظة هذا هو غير آمنة جدا حتى مع استخدام الرعاية - لم خرطوم نظام بلدي بضع مرات عند محاولة الخروج هذه الاشياء

وهنا إثبات صحة مفهوم التنفيذ أن يقحم البرمجية في loginwindow.

#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <strings.h>
#include <syslog.h>

#import <Cocoa/Cocoa.h>

#include <execinfo.h>

@interface LLApp:NSApplication
@end
@implementation LLApp
- (void)run
{
    syslog(LOG_ERR, "LLApp being run");
    [super run];
}
@end

void my_openlog(const char *ident, int logopt, int facility);

typedef struct interpose_s 
{
        void * new_func;
        void * orig_func;
} interpose_t;

int MyNSApplicationMain(int argc,  const char ** argv);


static const interpose_t interposers[] __attribute__ ((section("__DATA, __interpose")))     = {
{ (void *) my_openlog, (void *) openlog },
};

void my_openlog(const char *ident, int logopt, int facility)
{
        openlog(ident, logopt, facility);

    if(!strcmp(ident, "/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow"))
    {

        [LLApp poseAsClass:[NSApplication class]];
    }
    else
    {
        syslog(LOG_ERR, "Ignoring unknown indent: >%s<", ident);
    }
    return;
}

رمز يجمع مع:

gcc -Wall -dynamiclib -undefined dynamic_lookup -o ~/Desktop/libinterposers.dylib testin.m -framework Cocoa

كود التحميل هو على أساس فاصلة حتى launchd تعريف loginwindow يجب أن يحتوي على إدخال إضافية (إلى تمكين فاصلة في ديناميكية رابط) أي:

<key>EnvironmentVariables</key>
<dict>    
    <key>DYLD_INSERT_LIBRARIES</key>
    <string>path_to/Desktop/libinterposers.dylib</string>
</dict>

نصائح أخرى

نعم، يمكنك استخدام SFAuthorizationPluginView

هنا على الرابط المرجعية في ADC

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