3

からの関数のいくつかを使用して、IOKit/kext/KextManager.hカーネルに拡張機能をプログラムでロードしていますが、新しいエラー値が発生しています。例えば:

OSReturn osr = KextManagerLoadKextWithIdentifier(...);
// => -603947004

この値を、にある人間が読める形式の定義の1つに変換するにはどうすればよいlibkern/OSReturn.hですか?

4

2 に答える 2

1

@pmjordanのコメントによると、からの定義を使用して単純なマッピング関数を作成しましたOSReturn.h

- (void)human_readable_libkern_metaclass_error_message:(int) n {
  switch(n){
    case 0:
      printf("%s", "no error");
      break;
    case kOSMetaClassInternal:
      // libkern_metaclass_err(1) -603979775
      printf("%s", "Internal OSMetaClass run-time error.");
      break;
    case kOSMetaClassHasInstances:
      // libkern_metaclass_err(2) -603979774
      printf("%s", "A kext cannot be unloaded because there are instances derived from Libkern C++ classes that it defines.");
      break;
    case kOSMetaClassNoInit:
      // libkern_metaclass_err(3) -603979773
      printf("%s", "Internal error: The Libkern C++ class registration system was not properly initialized during kext loading.");
      break;
    case kOSMetaClassNoTempData:
      // libkern_metaclass_err(4) -603979772
      printf("%s", "Internal error: An allocation failure occurred registering Libkern C++ classes during kext loading.");
      break;
    case kOSMetaClassNoDicts:
      // libkern_metaclass_err(5) -603979771
      printf("%s", "Internal error: An allocation failure occurred registering Libkern C++ classes during kext loading.");
      break;
    case kOSMetaClassNoKModSet:
      // libkern_metaclass_err(6) -603979770
      printf("%s", "Internal error: An allocation failure occurred registering Libkern C++ classes during kext loading.");
      break;
    case kOSMetaClassNoInsKModSet:
      // libkern_metaclass_err(7) -603979769
      printf("%s", "Internal error: An error occurred registering a specific Libkern C++ class during kext loading.");
      break;
    case kOSMetaClassNoSuper:
      // libkern_metaclass_err(8) -603979768
      printf("%s", "Internal error: No superclass can be found for a specific Libkern C++ class during kext loading.");
      break;
    case kOSMetaClassInstNoSuper:
      // libkern_metaclass_err(9) -603979767
      printf("%s", "Internal error: No superclass can be found when constructing an instance of a Libkern C++ class.");
      break;
    case kOSMetaClassDuplicateClass:
      // libkern_metaclass_err(10) -603979766
      printf("%s", "A duplicate Libkern C++ classname was encountered during kext loading.");
      break;
    case kOSMetaClassNoKext:
      // libkern_metaclass_err(11) -603979765
      printf("%s", "Internal error: The kext for a Libkern C++ class can't be found during kext loading.");
      break;
    default:
      printf("%s", "Unknown: error not defined in <libkern/OSReturn.h>)");
      break;
  }
}
于 2012-11-26T07:31:53.167 に答える
1

XXXの読み込みに失敗しました-(libkern / kext)特権がありません。システム/カーネルログでエラーを確認するか、kextutil(8)を試してください。

ルート権限なしでkextloadを試行したときに表示されるエラーメッセージ。

-603947004 - this code appears in OSReturn when you try to load the kext via code without root privileges. The above code for translation works well for defined cases but for undefined error codes invoking the command via terminal helps.

于 2018-07-12T10:51:15.700 に答える