mxml_node_t *PhpCreateSettingElement( _Inout_ mxml_node_t *ParentNode, _In_ PPH_STRINGREF SettingName, _In_ PPH_STRINGREF SettingValue ) { mxml_node_t *settingNode; mxml_node_t *textNode; PPH_BYTES settingNameUtf8; PPH_BYTES settingValueUtf8; // Create the setting element. settingNode = mxmlNewElement(ParentNode, "setting"); settingNameUtf8 = PhConvertUtf16ToUtf8Ex(SettingName->Buffer, SettingName->Length); mxmlElementSetAttr(settingNode, "name", settingNameUtf8->Buffer); PhDereferenceObject(settingNameUtf8); // Set the value. settingValueUtf8 = PhConvertUtf16ToUtf8Ex(SettingValue->Buffer, SettingValue->Length); textNode = mxmlNewOpaque(settingNode, settingValueUtf8->Buffer); PhDereferenceObject(settingValueUtf8); return settingNode; }
VOID NotifyGrowl( _In_ PPH_PLUGIN_NOTIFY_EVENT NotifyEvent ) { PSTR notification; PPH_STRING title; PPH_BYTES titleUtf8; PPH_STRING message; PPH_BYTES messageUtf8; PPH_PROCESS_ITEM processItem; PPH_SERVICE_ITEM serviceItem; PPH_PROCESS_ITEM parentProcessItem; if (NotifyEvent->Handled) return; switch (NotifyEvent->Type) { case PH_NOTIFY_PROCESS_CREATE: processItem = NotifyEvent->Parameter; notification = GrowlNotifications[0]; title = processItem->ProcessName; parentProcessItem = PhReferenceProcessItemForParent(processItem); message = PhaFormatString( L"The process %s (%lu) was started by %s.", processItem->ProcessName->Buffer, HandleToUlong(processItem->ProcessId), parentProcessItem ? parentProcessItem->ProcessName->Buffer : L"an unknown process" ); if (parentProcessItem) PhDereferenceObject(parentProcessItem); break; case PH_NOTIFY_PROCESS_DELETE: processItem = NotifyEvent->Parameter; notification = GrowlNotifications[1]; title = processItem->ProcessName; message = PhaFormatString(L"The process %s (%lu) was terminated.", processItem->ProcessName->Buffer, HandleToUlong(processItem->ProcessId) ); break; case PH_NOTIFY_SERVICE_CREATE: serviceItem = NotifyEvent->Parameter; notification = GrowlNotifications[2]; title = serviceItem->DisplayName; message = PhaFormatString(L"The service %s (%s) has been created.", serviceItem->Name->Buffer, serviceItem->DisplayName->Buffer ); break; case PH_NOTIFY_SERVICE_DELETE: serviceItem = NotifyEvent->Parameter; notification = GrowlNotifications[3]; title = serviceItem->DisplayName; message = PhaFormatString(L"The service %s (%s) has been deleted.", serviceItem->Name->Buffer, serviceItem->DisplayName->Buffer ); break; case PH_NOTIFY_SERVICE_START: serviceItem = NotifyEvent->Parameter; notification = GrowlNotifications[4]; title = serviceItem->DisplayName; message = PhaFormatString(L"The service %s (%s) has been started.", serviceItem->Name->Buffer, serviceItem->DisplayName->Buffer ); break; case PH_NOTIFY_SERVICE_STOP: serviceItem = NotifyEvent->Parameter; notification = GrowlNotifications[5]; title = serviceItem->DisplayName; message = PhaFormatString(L"The service %s (%s) has been stopped.", serviceItem->Name->Buffer, serviceItem->DisplayName->Buffer ); break; default: return; } titleUtf8 = PH_AUTO(PhConvertUtf16ToUtf8Ex(title->Buffer, title->Length)); messageUtf8 = PH_AUTO(PhConvertUtf16ToUtf8Ex(message->Buffer, message->Length)); RegisterGrowl(TRUE); if (growl_tcp_notify("127.0.0.1", "Process Hacker", notification, titleUtf8->Buffer, messageUtf8->Buffer, NULL, NULL, NULL) == 0) NotifyEvent->Handled = TRUE; }
PPH_BYTES StringRefToUtf8( _In_ PPH_STRINGREF String ) { return PH_AUTO(PhConvertUtf16ToUtf8Ex(String->Buffer, String->Length)); }