summaryrefslogtreecommitdiffhomepage
path: root/dev/DDK
diff options
context:
space:
mode:
Diffstat (limited to 'dev/DDK')
-rw-r--r--dev/DDK/KernelCall.c29
-rw-r--r--dev/DDK/KernelStd.h23
2 files changed, 30 insertions, 22 deletions
diff --git a/dev/DDK/KernelCall.c b/dev/DDK/KernelCall.c
index 16c36f43..49bf57b5 100644
--- a/dev/DDK/KernelCall.c
+++ b/dev/DDK/KernelCall.c
@@ -10,7 +10,7 @@
#include <stdarg.h>
/// @brief this is an internal call, do not use it.
-DK_EXTERN __attribute__((naked)) void* __KernelCallDispatch(const char* name, int32_t cnt, void* data, size_t sz);
+DK_EXTERN ATTRIBUTE(naked) void* __KernelCallDispatch(const char* name, int32_t cnt, void* data, size_t sz);
/// @brief Interupt Kernel
/// @param KernelRpcName RPC name
@@ -19,12 +19,12 @@ DK_EXTERN __attribute__((naked)) void* __KernelCallDispatch(const char* name, in
/// @param sz The size of the whole data pointer.
/// @retval void* Kernel call was successful.
/// @retval nil Kernel call failed, call KernelLastError(void)
-DK_EXTERN void* KernelCall(const char* KernelRpcName, int32_t cnt, void* data, size_t sz)
+DK_EXTERN void* KernelCall(const char* name, int32_t cnt, void* data, size_t sz)
{
- if (!KernelRpcName || cnt == 0)
+ if (!name || *name == 0 || cnt == 0)
return nil;
- return __KernelCallDispatch(KernelRpcName, cnt, data, sz);
+ return __KernelCallDispatch(name, cnt, data, sz);
}
/// @brief Add system call.
@@ -37,19 +37,24 @@ DK_EXTERN void KernelAddSyscall(const int slot, void (*slotFn)(void* a0))
/// @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)
+/// @param name the object's name.
+/// @return Object manifest.
+DK_EXTERN struct DDK_OBJECT_MANIFEST* KernelGetObject(const int slot, const char* name)
{
- return KernelCall("RtlGetProperty", slot, (void*)name, 1);
+ struct DDK_OBJECT_MANIFEST* manifest = (struct DDK_OBJECT_MANIFEST*)KernelCall("RtlGetObject", slot, (void*)name, 1);
+
+ if (!manifest)
+ return nil;
+
+ return manifest;
}
/// @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.
+/// @param name the object's name.
+/// @param ddk_pr pointer to a object's DDK_OBJECT_MANIFEST.
/// @return property's object.
-DK_EXTERN void* KernelSetProperty(const int slot, const struct DDK_PROPERTY_RECORD* ddk_pr)
+DK_EXTERN void* KernelSetObject(const int slot, const struct DDK_OBJECT_MANIFEST* ddk_pr)
{
- return KernelCall("RtlSetProperty", slot, (void*)ddk_pr, 1);
+ return KernelCall("RtlSetObject", slot, (void*)ddk_pr, 1);
}
diff --git a/dev/DDK/KernelStd.h b/dev/DDK/KernelStd.h
index ab0c6eb8..da15f269 100644
--- a/dev/DDK/KernelStd.h
+++ b/dev/DDK/KernelStd.h
@@ -2,7 +2,8 @@
Copyright ZKA Technologies.
- Purpose: DDK DLL Base Header.
+ FILE: KernelStd.h
+ PURPOSE: DDK Driver model base header.
------------------------------------------- */
@@ -21,18 +22,20 @@
#define DK_FINAL
#endif // defined(__cplusplus)
+#define ATTRIBUTE(X) __attribute__((X))
+
#ifndef __NEWOSKRNL__
-#error !!! including header in user mode !!!
+#error !!! including header in low exception/ring-3 mode !!!
#endif // __NEWOSKRNL__
struct DDK_STATUS_STRUCT;
-struct DDK_PROPERTY_RECORD;
+struct DDK_OBJECT_MANIFEST;
-struct DDK_PROPERTY_RECORD DK_FINAL
+struct DDK_OBJECT_MANIFEST DK_FINAL
{
char* p_name;
+ int32_t p_kind;
void* p_object;
- void* p_xpcom_object;
};
/// \brief DDK status structure (__at_enable, __at_disable...)
@@ -50,12 +53,12 @@ struct DDK_STATUS_STRUCT DK_FINAL
/// @param dat data ptr
/// @param sz sz of whole data ptr.
/// @return result of call
-DK_EXTERN void* KernelCall(const char* KernelRpcName, int32_t cnt, void* dat, size_t sz);
+DK_EXTERN void* KernelCall(const char* name, int32_t cnt, void* dat, size_t sz);
/// @brief add system call.
/// @param slot system call slot
/// @param slotFn, syscall slot.
-DK_EXTERN void KernelAddSyscall(const int slot, void (*slotFn)(void* a0));
+DK_EXTERN void KernelAddSyscall(const int32_t slot, void (*slotFn)(void* a0));
/// @brief allocate heap ptr.
/// @param sz size of ptr.
@@ -70,14 +73,14 @@ DK_EXTERN void KernelFree(void*);
/// @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);
+DK_EXTERN struct DDK_OBJECT_MANIFEST* KernelGetObject(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.
+/// @param ddk_pr pointer to a property's DDK_OBJECT_MANIFEST.
/// @return property's object.
-DK_EXTERN void* KernelSetProperty(const int slot, const struct DDK_PROPERTY_RECORD* ddk_pr);
+DK_EXTERN void* KernelSetObject(const int32_t slot, const struct DDK_OBJECT_MANIFEST* ddk_pr);
/// @brief The highest API version of the DDK.
DK_EXTERN int32_t c_api_version_highest;