summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
Diffstat (limited to 'dev')
-rw-r--r--dev/DDK/KernelCall.c21
-rw-r--r--dev/DDK/KernelStd.h31
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;