void initialize_hidden_class_method_of_anonymous(sCLClass* klass) { klass->mFreeFun = NULL; klass->mShowFun = NULL; klass->mMarkFun = NULL; klass->mCreateFun = NULL; if(klass->mFlags & CLASS_FLAGS_NATIVE_BOSS) { gAnonymousClass = klass; gAnonymousTypeObject = create_type_object(gAnonymousClass); } }
void initialize_hidden_class_method_of_range(sCLClass* klass) { klass->mFreeFun = NULL; klass->mShowFun = NULL; klass->mMarkFun = mark_range_object; klass->mCreateFun = create_range_object_for_new; if(klass->mFlags & CLASS_FLAGS_NATIVE_BOSS) { gRangeClass = klass; gRangeTypeObject = create_type_object(gRangeClass); } }
VOID init_symbol_link(VOID) { UNICODE_STRING Name; OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; /* Create the object type for the "SymbolicLink" object. */ memset(&ObjectTypeInitializer, 0, sizeof(OBJECT_TYPE_INITIALIZER)); init_unistr(&Name, (PWSTR)LinkName); ObjectTypeInitializer.DefaultPagedPoolCharge = sizeof(OBJECT_SYMBOLIC_LINK); ObjectTypeInitializer.ValidAccessMask = SYMBOLIC_LINK_ALL_ACCESS; ObjectTypeInitializer.GenericMapping = symbol_link_mapping; ObjectTypeInitializer.DeleteProcedure = delete_symbol_link; ObjectTypeInitializer.ParseProcedure = parse_symbol_link; create_type_object(&ObjectTypeInitializer, &Name, &symbol_link_type); } /* end init_symbol_link */
VOID init_completion_implement(VOID) { OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; UNICODE_STRING Name; memset(&ObjectTypeInitializer, 0, sizeof(ObjectTypeInitializer)); init_unistr(&Name, completion_type_name); ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer); ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(struct uk_completion); ObjectTypeInitializer.GenericMapping = completion_mapping; ObjectTypeInitializer.PoolType = NonPagedPool; ObjectTypeInitializer.ValidAccessMask = EVENT_ALL_ACCESS; ObjectTypeInitializer.UseDefaultObject = TRUE; create_type_object(&ObjectTypeInitializer, &Name, &completion_object_type); }
VOID init_section_implement(VOID) { OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; UNICODE_STRING Name; /* Initialize the Section object type */ memset(&ObjectTypeInitializer, 0, sizeof(ObjectTypeInitializer)); init_unistr(&Name, (PWSTR)section_type_name); ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer); ObjectTypeInitializer.DefaultPagedPoolCharge = sizeof(struct win32_section); ObjectTypeInitializer.PoolType = PagedPool; ObjectTypeInitializer.UseDefaultObject = TRUE; ObjectTypeInitializer.GenericMapping = section_mapping; ObjectTypeInitializer.DeleteProcedure = delete_section; create_type_object(&ObjectTypeInitializer, &Name, §ion_object_type); } /* end init_section_implement */
VOID init_mutant_implement(VOID) { OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; UNICODE_STRING Name; memset(&ObjectTypeInitializer, 0, sizeof(ObjectTypeInitializer)); init_unistr(&Name, (PWSTR)mutant_type_name); ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer); ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(struct kmutant); ObjectTypeInitializer.GenericMapping = mutant_mapping; ObjectTypeInitializer.PoolType = NonPagedPool; ObjectTypeInitializer.ValidAccessMask = MUTANT_ALL_ACCESS; ObjectTypeInitializer.UseDefaultObject = TRUE; ObjectTypeInitializer.DeleteProcedure = delete_mutant; create_type_object(&ObjectTypeInitializer, &Name, &mutant_object_type); }
VOID init_thread_mgmt(VOID) { UNICODE_STRING Name; OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; ktrace("Creating Thread Object Type\n"); /* Initialize the Thread type */ memset(&ObjectTypeInitializer, 0, sizeof(ObjectTypeInitializer)); init_unistr(&Name, (PWSTR)ThreadTypeName); ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer); ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(struct ethread); ObjectTypeInitializer.GenericMapping = PiThreadMapping; ObjectTypeInitializer.PoolType = NonPagedPool; ObjectTypeInitializer.ValidAccessMask = THREAD_ALL_ACCESS; ObjectTypeInitializer.UseDefaultObject = TRUE; ObjectTypeInitializer.DeleteProcedure = delete_thread; ObjectTypeInitializer.PollProcedure = poll_thread; create_type_object(&ObjectTypeInitializer, &Name, &thread_object_type); }
int main(int argc, char *argv[]) { std::cout << "C++: This is process: " << getpid() << std::endl; PyObject *pName, *pModule, *pFunc; //, *pDict, ; PyObject *pValue; // *pArgs, // int i; std::string module("python6"); std::string function("run_now"); // Initilize Python Py_Initialize(); /* NameObjectType.tp_new = PyType_GenericNew; if (PyType_Ready(&NameObjectType) < 0) { PyErr_Print(); fprintf(stderr, "Type not ready - PyType_Ready\n"); return 1; } */ PyTypeObject* type_object = create_type_object(); if (PyType_Ready(type_object) < 0) { PyErr_Print(); fprintf(stderr, "Type not ready - PyType_Ready\n"); free_type_object(type_object); return 1; } PyObject* m = Py_InitModule3("name", NULL, "XXX"); if (!m) { PyErr_Print(); fprintf(stderr, "Failed to load initilize module - Py_InitModule3\n"); free_type_object(type_object); return 1; } /*Py_INCREF(&NameObjectType); PyModule_AddObject(m, "Name", (PyObject *)&NameObjectType);*/ Py_INCREF(type_object); PyModule_AddObject(m, "Name", (PyObject*)type_object); // Load module python2.py pName = PyString_FromString(module.c_str()); // Error checking of pName left out pModule = PyImport_Import(pName); Py_DECREF(pName); if (!pModule) { PyErr_Print(); fprintf(stderr, "Failed to load \"%s\"\n", argv[1]); free_type_object(type_object); return 1; } // Get the python fuction to call pFunc = PyObject_GetAttrString(pModule, function.c_str()); // pFunc is a new reference if (!pFunc || !PyCallable_Check(pFunc)) { if (PyErr_Occurred()) PyErr_Print(); fprintf(stderr, "Cannot find function \"%s\"\n", argv[2]); Py_XDECREF(pFunc); Py_DECREF(pModule); free_type_object(type_object); return 1; } // Make the call to the python function pValue = PyObject_CallObject(pFunc, NULL); if (!pValue) { PyErr_Print(); fprintf(stderr,"Call failed\n"); Py_DECREF(pFunc); Py_DECREF(pModule); free_type_object(type_object); return 1; } // Show the result of the python call printf("Result of call: %ld\n", PyInt_AsLong(pValue)); // Decrease counters for python garbage collection Py_DECREF(pValue); Py_XDECREF(pFunc); Py_DECREF(pModule); std::cout << "Before Py_Finalize()" << std::endl; // Clean up python Py_Finalize(); free_type_object(type_object); std::cout << "Freeing the allocated memory" << std::endl; return 0; }