diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-08-19 12:18:08 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-08-19 12:18:08 +0200 |
| commit | 6120d4cb06086a3cf05964f7838e2ec48b6d555c (patch) | |
| tree | 758763a8c60e6bd058b6e3abe1fdad3ceb0e5190 | |
| parent | ca62fb16d52701d5a0d4842f16e850a2ba395379 (diff) | |
[DDK]
+ Add property kernel calls regarding kernel objects.
+ So we can add and fetch them.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
| -rw-r--r-- | dev/DDK/KernelCall.c | 21 | ||||
| -rw-r--r-- | dev/DDK/KernelStd.h | 31 |
2 files changed, 47 insertions, 5 deletions
diff --git a/dev/DDK/KernelCall.c b/dev/DDK/KernelCall.c index c0a6ed15..8c890579 100644 --- a/dev/DDK/KernelCall.c +++ b/dev/DDK/KernelCall.c @@ -32,5 +32,24 @@ DK_EXTERN void* kernelCall(const char* kernelRpcName, int32_t cnt, void* data, s /// @param slotFn, syscall slot. DK_EXTERN void kernelAddSyscall(const int slot, void (*slotFn)(void* a0)) { - kernelCall("AddSyscall", slot, slotFn, 0); + kernelCall("AddSyscall", slot, slotFn, 1); +} + +/// @brief Get a kernel property. +/// @param slot property id (always 0) +/// @param name the prperty's name. +/// @return property's object. +DK_EXTERN void* kernelGetProperty(const int slot, const char* name) +{ + return kernelCall("GetProperty", slot, name, 1); +} + +/// @brief Set a kernel property. +/// @param slot property id (always 0) +/// @param name the property's name. +/// @param ddk_pr pointer to a property's DDK_PROPERTY_RECORD. +/// @return property's object. +DK_EXTERN void* kernelSetProperty(const int slot, const struct DDK_PROPERTY_RECORD* ddk_pr) +{ + return kernelCall("SetProperty", slot, ddk_pr, 1); } diff --git a/dev/DDK/KernelStd.h b/dev/DDK/KernelStd.h index a00a080b..0436469e 100644 --- a/dev/DDK/KernelStd.h +++ b/dev/DDK/KernelStd.h @@ -26,13 +26,22 @@ #endif // __NEWOSKRNL__ struct DDK_STATUS_STRUCT; +struct DDK_PROPERTY_RECORD; + +struct DDK_PROPERTY_RECORD DK_FINAL +{ + char* p_name; + void* p_object; + void* p_scm_object; +}; /// \brief DDK status structure (__at_enable, __at_disable...) struct DDK_STATUS_STRUCT DK_FINAL { - int32_t action_id; - int32_t issuer_id; - int32_t group_id; + int32_t s_action_id; + int32_t s_issuer_id; + int32_t s_group_id; + void* s_object; }; /// @brief Call kernel (interrupt 0x33) @@ -57,6 +66,20 @@ DK_EXTERN void* kernelAlloc(size_t sz); /// @param pointer to free DK_EXTERN void kernelFree(void*); + +/// @brief Get a kernel property. +/// @param slot property id (always 0) +/// @param name the property's name. +/// @return property's object. +DK_EXTERN void* kernelGetProperty(const int slot, const char* name); + +/// @brief Set a kernel property. +/// @param slot property id (always 0) +/// @param name the property's name. +/// @param ddk_pr pointer to a property's DDK_PROPERTY_RECORD. +/// @return property's object. +DK_EXTERN void* kernelSetProperty(const int slot, const struct DDK_PROPERTY_RECORD* ddk_pr); + /// @brief The highest API version of the DDK. DK_EXTERN int32_t c_api_version_highest; @@ -64,4 +87,4 @@ DK_EXTERN int32_t c_api_version_highest; DK_EXTERN int32_t c_api_version_least; /// @brief c_api_version_least+c_api_version_highest combined version. -DK_EXTERN int32_t c_api_version;
\ No newline at end of file +DK_EXTERN int32_t c_api_version; |
