diff --git a/BUILD.gn b/BUILD.gn index 3b4ccb0..204f211 100755 --- a/BUILD.gn +++ b/BUILD.gn @@ -96,6 +96,7 @@ ohos_shared_library("syscap_tool_shared") { ohos_shared_library("syscap_interface_shared") { include_dirs = [ "./interfaces/inner_api/" ] + public_configs = [ ":pubilc" ] sources = [ "./interfaces/inner_api/syscap_interface.c" ] deps = [ "//third_party/bounds_checking_function:libsec_static" ] diff --git a/interfaces/inner_api/syscap_interface.c b/interfaces/inner_api/syscap_interface.c index 8b239c2..cb8fc4c 100644 --- a/interfaces/inner_api/syscap_interface.c +++ b/interfaces/inner_api/syscap_interface.c @@ -19,10 +19,13 @@ #include #include #include +#include "create_pcid.h" #include "syscap_interface.h" #define PCID_OUT_BUFFER 32 #define MAX_SYSCAP_STR_LEN 128 +#define OS_SYSCAP_BYTES 120 +#define BITS_OF_BYTE 8 #define PRINT_ERR(...) \ do { \ @@ -30,7 +33,137 @@ printf(__VA_ARGS__); \ } while (0) -bool EncodeOsSyscap(int output[32]) +static SyscapWithNum arraySyscap[] = { + {"SystemCapability.Account.AppAccount", ACCOUNT_APPACCOUNT}, + {"SystemCapability.Account.OsAccount", ACCOUNT_OSACCOUNT}, + {"SystemCapability.Ace.AceEngineLite", ACE_ACEENGINELITE}, + {"SystemCapability.Ai.AiEngine", AI_AIENGINE}, + {"SystemCapability.Applications.ContactsData", APPLICATIONS_CONTACTSDATA}, + {"SystemCapability.Barrierfree.Accessibility.Core", BARRIERFREE_ACCESSIBILITY_CORE}, + {"SystemCapability.BundleManager.BundleFramework", BUNDLEMANAGER_BUNDLEFRAMEWORK}, + {"SystemCapability.BundleManager.BundleTool", BUNDLEMANAGER_BUNDLETOOL}, + {"SystemCapability.BundleManager.DistributedBundleFramework", BUNDLEMANAGER_DISTRIBUTEDBUNDLEFRAMEWORK}, + {"SystemCapability.BundleManager.Zlib", BUNDLEMANAGER_ZLIB}, + {"SystemCapability.Communication.Bluetooth.Core", COMMUNICATION_BLUETOOTH_CORE}, + {"SystemCapability.Communication.NetManager.Core", COMMUNICATION_NETMANAGER_CORE}, + {"SystemCapability.Communication.NetManager.Extension", COMMUNICATION_NETMANAGER_EXTENSION}, + {"SystemCapability.Communication.NetStack", COMMUNICATION_NETSTACK}, + {"SystemCapability.Communication.SoftBus.Core", COMMUNICATION_SOFTBUS_CORE}, + {"SystemCapability.Communication.WiFi.AP", COMMUNICATION_WIFI_AP}, + {"SystemCapability.Communication.WiFi.Core", COMMUNICATION_WIFI_CORE}, + {"SystemCapability.Communication.WiFi.HotspotExt", COMMUNICATION_WIFI_HOTSPOTEXT}, + {"SystemCapability.Communication.WiFi.P2P", COMMUNICATION_WIFI_P2P}, + {"SystemCapability.Communication.WiFi.STA", COMMUNICATION_WIFI_STA}, + {"SystemCapability.Customization.ConfigPolicy", CUSTOMIZATION_CONFIGPOLICY}, + {"SystemCapability.Customization.EnterpriseDeviceManager", CUSTOMIZATION_ENTERPRISEDEVICEMANAGER}, + {"SystemCapability.DistributedDataManager.DataObject.DistributedObject", DISTRIBUTEDDATAMANAGER_DATAOBJECT_DISTRIBUTEDOBJECT}, + {"SystemCapability.DistributedDataManager.DataShare.Consumer", DISTRIBUTEDDATAMANAGER_DATASHARE_CONSUMER}, + {"SystemCapability.DistributedDataManager.DataShare.Core", DISTRIBUTEDDATAMANAGER_DATASHARE_CORE}, + {"SystemCapability.DistributedDataManager.DataShare.Provider", DISTRIBUTEDDATAMANAGER_DATASHARE_PROVIDER}, + {"SystemCapability.DistributedDataManager.KVStore.Core", DISTRIBUTEDDATAMANAGER_KVSTORE_CORE}, + {"SystemCapability.DistributedDataManager.KVStore.DistributedKVStore", DISTRIBUTEDDATAMANAGER_KVSTORE_DISTRIBUTEDKVSTORE}, + {"SystemCapability.DistributedDataManager.KVStore.Lite", DISTRIBUTEDDATAMANAGER_KVSTORE_LITE}, + {"SystemCapability.DistributedDataManager.Preferences.Core", DISTRIBUTEDDATAMANAGER_PREFERENCES_CORE}, + {"SystemCapability.DistributedDataManager.RelationalStore.Core", DISTRIBUTEDDATAMANAGER_RELATIONALSTORE_CORE}, + {"SystemCapability.DistributedHardware.DeviceManager", DISTRIBUTEDHARDWARE_DEVICEMANAGER}, + {"SystemCapability.distributedhardware.distributed_camera", DISTRIBUTEDHARDWARE_DISTRIBUTED_CAMERA}, + {"SystemCapability.distributedhardware.distributed_hardware_fwk", DISTRIBUTEDHARDWARE_DISTRIBUTED_HARDWARE_FWK}, + {"SystemCapability.distributedhardware.distributed_screen", DISTRIBUTEDHARDWARE_DISTRIBUTED_SCREEN}, + {"SystemCapability.FileManagement.FileManagerService", FILEMANAGEMENT_FILEMANAGERSERVICE}, + {"SystemCapability.FileManagement.RemoteFileShare", FILEMANAGEMENT_REMOTEFILESHARE}, + {"SystemCapability.Global.ResourceManager", GLOBAL_RESOURCEMANAGER}, + {"SystemCapability.Graphic.Graphic2D.NativeDrawing", GRAPHIC_GRAPHIC2D_NATIVEDRAWING}, + {"SystemCapability.Graphic.Graphic2D.NativeWindow", GRAPHIC_GRAPHIC2D_NATIVEDRAWING}, + {"SystemCapability.Graphic.Graphic2D.WebGL", GRAPHIC_GRAPHIC2D_WEBGL}, + {"SystemCapability.Graphic.Graphic2D.WebGL2", GRAPHIC_GRAPHIC2D_WEBGL2}, + {"SystemCapability.Graphic.Surface", GRAPHIC_SURFACE}, + {"SystemCapability.Graphic.UI", GRAPHIC_UI}, + {"SystemCapability.Graphic.Utils", GRAPHIC_UTILS}, + {"SystemCapability.Graphic.Wms", GRAPHIC_WMS}, + {"SystemCapability.HiviewDFX.HiAppEvent", HIVIEWDFX_HIAPPEVENT}, + {"SystemCapability.HiviewDFX.HiDumper", HIVIEWDFX_HIDUMPER}, + {"SystemCapability.HiviewDFX.HiLog", HIVIEWDFX_HILOG}, + {"SystemCapability.HiviewDFX.HiLogLite", HIVIEWDFX_HILOGLITE}, + {"SystemCapability.HiviewDFX.HiProfiler.HiDebug", HIVIEWDFX_HIPROFILER_HIDEBUG}, + {"SystemCapability.HiviewDFX.HiSysEvent", HIVIEWDFX_HISYSEVENT}, + {"SystemCapability.HiviewDFX.HiTrace", HIVIEWDFX_HITRACE}, + {"SystemCapability.HiviewDFX.Hiview", HIVIEWDFX_HIVIEW}, + {"SystemCapability.HiviewDFX.Hiview.FaultLogger", HIVIEWDFX_HIVIEW_FAULTLOGGER}, + {"SystemCapability.I18N", I18N}, + {"SystemCapability.Global.I18n", GLOBAL_I18N}, + {"SystemCapability.Kernel.liteos-a", KERNEL_LITEOS_A}, + {"SystemCapability.Location.Location", LOCATION_LOCATION}, + {"SystemCapability.MiscServices.download", MISCSERVICES_DOWNLOAD}, + {"SystemCapability.Miscservices.InputMethod", MISCSERVICES_INPUTMETHOD}, + {"SystemCapability.Miscservices.Pasteboard", MISCSERVICES_PASTEBOARD}, + {"SystemCapability.MiscServices.ScreenLock", MISCSERVICES_SCREENLOCK}, + {"SystemCapability.MiscServices.Time", MISCSERVICES_TIME}, + {"SystemCapability.MiscServices.Upload", MISCSERVICES_UPLOAD}, + {"SystemCapability.MiscServices.Wallpaper", MISCSERVICES_WALLPAPER}, + {"SystemCapability.Msdp.DeviceStatus", MSDP_DEVICESTATUS}, + {"SystemCapability.Multimedia.MediaLibrary", MULTIMEDIA_MEDIALIBRARY}, + {"SystemCapability.Multimedia.Media.AudioPlayer", MULTIMEDIA_MEDIA_AUDIOPLAYER}, + {"SystemCapability.Multimedia.Media.AudioRecorder", MULTIMEDIA_MEDIA_AUDIORECORDER}, + {"SystemCapability.Multimedia.Media.Codec", MULTIMEDIA_MEDIA_CODEC}, + {"SystemCapability.Multimedia.Media.Core", MULTIMEDIA_MEDIA_CORE}, + {"SystemCapability.Multimedia.Media.Muxer", MULTIMEDIA_MEDIA_MUXER}, + {"SystemCapability.Multimedia.Image", MULTIMEDIA_IMAGE}, + {"SystemCapability.Multimedia.Image.Core", MULTIMEDIA_IMAGE_CORE}, + {"SystemCapability.Multimedia.Image.ImageSource", MULTIMEDIA_IMAGE_IMAGESOURCE}, + {"SystemCapability.Multimedia.Image.ImagePacker", MULTIMEDIA_IMAGE_IMAGEPACKER}, + {"SystemCapability.Multimedia.Image.ImageReceiver", MULTIMEDIA_IMAGE_IMAGERECEIVER}, + {"SystemCapability.Multimedia.Media.Spliter", MULTIMEDIA_MEDIA_SPLITER}, + {"SystemCapability.Multimedia.Media.VideoPlayer", MULTIMEDIA_MEDIA_VIDEOPLAYER}, + {"SystemCapability.Multimedia.Media.VideoRecorder", MULTIMEDIA_MEDIA_VIDEORECORDER}, + {"SystemCapability.multimodalinput.input", MULTIMODALINPUT_INPUT}, + {"SystemCapability.Notification.CommonEvent", NOTIFICATION_COMMONEVENT}, + {"SystemCapability.Notification.Emitter", NOTIFICATION_EMITTER}, + {"SystemCapability.Notification.Notification", NOTIFICATION_NOTIFICATION}, + {"SystemCapability.Notification.ReminderAgent", NOTIFICATION_REMINDERAGENT}, + {"SystemCapability.PowerManager.BatteryManager.Core", POWERMANAGER_BATTERYMANAGER_CORE}, + {"SystemCapability.PowerManager.BatteryManager.Extension", POWERMANAGER_BATTERYMANAGER_EXTENSION}, + {"SystemCapability.PowerManager.BatteryManager.Lite", POWERMANAGER_BATTERYMANAGER_LITE}, + {"SystemCapability.PowerManager.BatteryStatistics", POWERMANAGER_BATTERYSTATISTICS}, + {"SystemCapability.PowerManager.DisplayPowerManager", POWERMANAGER_DISPLAYPOWERMANAGER}, + {"SystemCapability.PowerManager.PowerManager.Core", POWERMANAGER_POWERMANAGER_CORE}, + {"SystemCapability.PowerManager.PowerManager.Extension", POWERMANAGER_POWERMANAGER_EXTENSION}, + {"SystemCapability.PowerManager.PowerManager.Lite", POWERMANAGER_POWERMANAGER_LITE}, + {"SystemCapability.PowerManager.ThermalManager", POWERMANAGER_THERMALMANAGER}, + {"SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask", RESOURCESCHEDULE_BACKGROUNDTASKMANAGER_CONTINUOUSTASK}, + {"SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask", RESOURCESCHEDULE_BACKGROUNDTASKMANAGER_TRANSIENTTASK}, + {"SystemCapability.ResourceSchedule.UsageStatistics.App", RESOURCESCHEDULE_USAGESTATISTICS_APP}, + {"SystemCapability.ResourceSchedule.UsageStatistics.AppGroup", RESOURCESCHEDULE_USAGESTATISTICS_APPGROUP}, + {"SystemCapability.ResourceSchedule.WorkScheduler", RESOURCESCHEDULE_WORKSCHEDULER}, + {"SystemCapability.Security.AccessToken", SECURITY_ACCESSTOKEN}, + {"SystemCapability.Security.AppVerify", SECURITY_APPVERIFY}, + {"SystemCapability.Security.DataTransitManager", SECURITY_DATATRANSITMANAGER}, + {"SystemCapability.Security.DeviceAuth", SECURITY_DEVICEAUTH}, + {"SystemCapability.Security.DeviceSecurityLevel", SECURITY_DEVICESECURITYLEVEL}, + {"SystemCapability.Security.Huks", SECURITY_HUKS}, + {"SystemCapability.Sensors.MiscDevice", SENSORS_MISCDEVICE}, + {"SystemCapability.Sensors.Sensor", SENSORS_SENSOR}, + {"SystemCapability.Sensors.Sensor_lite", SENSORS_SENSOR_LITE}, + {"SystemCapability.Telephony.CallManager", TELEPHONY_CALLMANAGER}, + {"SystemCapability.Telephony.CellularCall", TELEPHONY_CELLULARCALL}, + {"SystemCapability.Telephony.CellularData", TELEPHONY_CELLULARDATA}, + {"SystemCapability.Telephony.CoreService", TELEPHONY_CORESERVICE}, + {"SystemCapability.Telephony.DataStorage", TELEPHONY_DATASTORAGE}, + {"SystemCapability.Telephony.DCall", TELEPHONY_DCALL}, + {"SystemCapability.Telephony.SmsMms", TELEPHONY_SMSMMS}, + {"SystemCapability.Telephony.StateRegistry", TELEPHONY_STATEREGISTRY}, + {"SystemCapability.Test.UiTest", TEST_UITEST}, + {"SystemCapability.Test.WuKong", TEST_WUKONG}, + {"SystemCapability.Updater.Raw", UPDATER_RAW}, + {"SystemCapability.Update.UpdateService", UPDATE_UPDATESERVICE}, + {"SystemCapability.USB.USBManager", USB_USBMANAGER}, + {"SystemCapability.UserIAM.AuthExecutorManager", USERIAM_AUTHEXECUTORMANAGER}, + {"SystemCapability.UserIAM.UserAuth.Core", USERIAM_USERAUTH_CORE}, + {"SystemCapability.UserIAM.UserAuth.FaceAuth", USERIAM_USERAUTH_FACEAUTH}, + {"SystemCapability.UserIAM.UserAuth.PinAuth", USERIAM_USERAUTH_PINAUTH}, + {"SystemCapability.UserIAM.UserIdm", USERIAM_USERIDM} +}; + +bool EncodeOsSyscap(int (*output)[32]) { uint8_t *outputArray = (uint8_t *)malloc(sizeof(int) * PCID_OUT_BUFFER); if (outputArray == NULL) { @@ -43,7 +176,7 @@ bool EncodeOsSyscap(int output[32]) for (uint16_t i = 0; i < countBytes; i++) { outputArray[i] |= 0XFF; } - int ret = memcpy_s(output, sizeof(int) * PCID_OUT_BUFFER, outputArray, sizeof(int) * PCID_OUT_BUFFER); + int ret = memcpy_s(*output, sizeof(int) * PCID_OUT_BUFFER, outputArray, sizeof(int) * PCID_OUT_BUFFER); if (ret != 0) { PRINT_ERR("memcpy_s failed."); free(outputArray); @@ -53,7 +186,7 @@ bool EncodeOsSyscap(int output[32]) return true; } -bool EncodePrivateSyscap(char *output, int *outputLen) +bool EncodePrivateSyscap(char **output, int *outputLen) { static char syscapStr[MAX_SYSCAP_STR_LEN] = "Systemcapability.Ai.AiEngine"; int ret = strcpy_s(output, MAX_SYSCAP_STR_LEN, syscapStr); @@ -63,5 +196,57 @@ bool EncodePrivateSyscap(char *output, int *outputLen) } *outputLen = strlen(syscapStr); + return true; +} + +bool DecodeOsSyscap(int input[32], char ***output, int *outputCnt) +{ + errno_t nRet = 0; + const int headerWithInt = 2; // 2, int[2] of pcid header + int *tmp = NULL; + uint8_t osSyscap[OS_SYSCAP_BYTES]; + uint16_t indexOfSyscap[OS_SYSCAP_BYTES * OS_SYSCAP_BYTES] = {0}; + int countOfSyscap = 0, i, j, k = 0; + + tmp = input + headerWithInt; + nRet = memcpy_s(osSyscap, OS_SYSCAP_BYTES, tmp, OS_SYSCAP_BYTES); + if (nRet != EOK) { + PRINT_ERR("memcpy_s failed."); + *outputCnt = 0; + return false; + } + + for (i = 0; i < OS_SYSCAP_BYTES; i++) { + for (j = 0; j < BITS_OF_BYTE; j++) { + if (osSyscap[i] & (0x01 << j)) { + indexOfSyscap[countOfSyscap++] = i * BITS_OF_BYTE + j; + } + } + } + *outputCnt = countOfSyscap; + char (*strSyscap)[MAX_SYSCAP_STR_LEN] = \ + (char (*)[MAX_SYSCAP_STR_LEN])malloc(countOfSyscap * MAX_SYSCAP_STR_LEN); + if (strSyscap == NULL) { + PRINT_ERR("malloc failed."); + *outputCnt = 0; + return false; + } + (void)memset_s(strSyscap, countOfSyscap * MAX_SYSCAP_STR_LEN, \ + 0, countOfSyscap * MAX_SYSCAP_STR_LEN); + + for (i = 0; i < countOfSyscap; i++) { + for (j = 0; j < sizeof(arraySyscap) / sizeof(SyscapWithNum); j++) { + if (arraySyscap[j].num == indexOfSyscap[i]) { + nRet = strcpy_s(strSyscap[k++], MAX_SYSCAP_STR_LEN - 1, arraySyscap[j].syscapStr); + } + if (nRet != EOK) { + PRINT_ERR("strcpy_s failed."); + *outputCnt = 0; + free(strSyscap); + return false; + } + } + } + *output = (char **)strSyscap; return true; } \ No newline at end of file diff --git a/interfaces/inner_api/syscap_interface.h b/interfaces/inner_api/syscap_interface.h index 1649a96..6a76560 100644 --- a/interfaces/inner_api/syscap_interface.h +++ b/interfaces/inner_api/syscap_interface.h @@ -34,10 +34,10 @@ typedef struct ProductCompatibilityIDHead { } PCIDHead; // to do -bool EncodeOsSyscap(int output[32]); -bool DecodeOsSyscap(int input[32], char **output, int *outputCnt, int** outputLen); -bool EncodePrivateSyscap(char *output, int *outputLen); -bool DecodePrivateSyscap(char *input, int inputLen, char *output, int *outputCnt, int **outputLen); +bool EncodeOsSyscap(int (*output)[32]); +bool DecodeOsSyscap(int input[32], char ***output, int *outputCnt); +bool EncodePrivateSyscap(char **output, int *outputLen); +bool DecodePrivateSyscap(char *input, char ***output, int *outputCnt); #ifdef __cplusplus #if __cplusplus