Developers guidelines October 2006 Signing applications for Sony Ericsson UIQ 3 phones
Developers guidelines | Signing applications Preface Purpose of this document This document describes how to handle signing of native Symbian™ OS v9 applications for Sony Ericsson phones. The document is intended for developers of UIQ™ 3 C++ applications who want insight in the implications of Symbian Platform Security (PlatSec) on the deployment and installation of applications in these phones. Readers who will benefit from this document include support engineers and software developers.
Developers guidelines | Signing applications Sony Ericsson Developer World On www.sonyericsson.com/developer, developers will find documentation and tools such as phone White Papers, Developers Guidelines for different technologies, SDKs and relevant APIs. The website also contains discussion forums monitored by the Sony Ericsson Developer Support team, an extensive Knowledge Base, Tips & Tricks, example code and news. Sony Ericsson also offers technical support services to professional developers.
Developers guidelines | Signing applications Typographical conventions Code is written in Courier font, for example: TInt CCamera::CamerasAvailable() Trademarks and acknowledgements Symbian, Symbian OS, UIQ Technologies, UIQ and other Symbian marks are all trademarks of Symbian Ltd. Other product and company names mentioned herein may be the trademarks of their respective owners.
Developers guidelines | Signing applications Contents Symbian OS v9 security architecture ........................................................................7 Introduction ...............................................................................................................8 Capabilities ................................................................................................................8 Restricted and unrestricted APIs .............................................................
Developers guidelines | Signing applications Capability: WriteDeviceData ................................................................................66 Capability: WriteUserData ...................................................................................74 Capability: Illegal ..................................................................................................
Developers guidelines | Signing applications Symbian OS v9 security architecture This chapter gives a general overview of the Symbian OS v9 security features as implemented in Sony Ericsson mobile phones.
Developers guidelines | Signing applications Introduction Symbian OS version 9.x is specifically intended for mid-range phones to be produced in large numbers of units. The open development platform, featuring many new key technologies, offers large opportunities for ISVs (Independent Software Vendors) to find markets for their products.
Developers guidelines | Signing applications Identifiers Symbian OS v9 Platform Security also requires that applications can be uniquely identified and strictly classified to reflect their PlatSec level of trust. For example, signed and unsigned application are clearly separated by having UID values in separated value ranges. Unique Identifiers, UIDs In Symbian OS, objects are identified by three 32 bit globally unique identifiers, referred to as UID1, UID2 and UID3.
Developers guidelines | Signing applications IF a VID value other than 0 is to be used, it is specified in the .MMP file of the application. VID values must not be specified for unsigned applications. Data caging Data caging has been introduced in Symbian OS v9 to prevent one application to overwrite data belonging to another application. The file system has the following structure: • \sys : This is the restricted system area which is only accessible for highly trusted system processes.
Developers guidelines | Signing applications The following table lists allowed user granted permissions per capability for unsigned applications: Capability User granted permission NetworkServices One-shot LocalServices Blanket ReadUserData One-shot WriteUserData One-shot UserEnvironment Blanket Location One-shot Note: An application that could be deployed as an unsigned - sandboxed application may as well be subdued to the Symbian Signed process.
Developers guidelines | Signing applications blanket or one-shot permissions at install time. Only standard (generic) testing is required for an application to be Symbian Signed. • Extended capabilities Highly trusted applications may be granted access to this set. For an application utilizing one or more capabilities in this set to be Symbian Signed, it has to go comply to extended testing criteria.
Developers guidelines | Signing applications Developer certificates As a consequence of the Symbian OS v9 enhanced platform security, applications that require access to restricted APIs can not be installed on targeted devices before they have been signed, which in turn makes it impossible to test applications on real mobile phones during the development process. To take care of this, special developer certificates can be achieved via the Symbian Signed programme.
Developers guidelines | Signing applications Symbian OS v9 application signing This chapter describes the practical implications of Symbian OS v9 platform security and the steps developers need to take during development of Symbian Signed applications.
Developers guidelines | Signing applications Planning for development There are a number of considerations to take in the beginning of the development process for a Symbian OS applications. Apart from the normal system analysis and design, also the design implications on signing requirements and testing procedures specific for the Symbian OS v9 platform must be taken into account.
Developers guidelines | Signing applications Note that an application can only be granted rights to exactly the capabilities in a set that it actually requires. When sending an application for signing, all requested capabilities must be declared for the application to be approved.The following tables list all capabilities and describe in general terms what functionalities each capability may grant to applications . Basic capabilities LocalServices Grants access to the local network.
Developers guidelines | Signing applications WriteDeviceData Grants write access to sensitive system data. SWEvent Grants read access to confidential system data. System data that is not confidential does not need to be protected by this capability. API examples: Test utilities, FEP ProtServ Grants the right to a server to register with a pro- Mainly granted to system servers. tected name. Protected names begins with a “!”.
Developers guidelines | Signing applications Trusted Computing Base. Grants write access to /sys and /resource. API examples: Kernel, F32, SWInstall server AllFiles Makes all files visible. Grants extra write access to files under /private. Mainly granted to test utilities and backup & restore API examples: F32, SWInstall CommDD Grants access to all communication device driv- API examples: ers, for example EComm and USB device drivers.
Developers guidelines | Signing applications *”\.key”, “\.cer” [,KEY=”] for example, *”files\devcert2.key”,”files\devcert2.cer”,KEY=”password” MakeSis is run with the modified .pkg file create the .SIS file prepared for signing, and finally SignSis does the signing. An alternate signing method is to omit the extra line in the .pkg file, create the .
Developers guidelines | Signing applications In Symbian OS v9, UID ranges have been changed compared to earlier OS versions. The following table lists UID ranges to be allocated Symbian APP, EXE or DLL files of different categories. UID classes 0-9 (range 0x00000000 – 0x9FFFFFFF) are referred to as the protected range, and classes A-F (range 0xA0000000 – 0xFFFFFFFF) as the unprotected range. UID ranges not in this table are reserved.
Developers guidelines | Signing applications When logged in on the Symbian Signed portal, UIDs allocated to the account can be viewed by clicking “View UIDs” in the left navigation bar. ACS publisher ID Having an application Symbian Signed requires an ACS publisher ID, either owned by the developer or by a publisher certifier.
Developers guidelines | Signing applications Developer certificates can be issued on three different levels, depending primarily on wich capabilities are required and how many specific phones (identified by their IMEI) are to be used for testing. The following table lists granted capabilites for each certificate level, and the requirements for a developer to be allowed to request a developer certificate on a certain level.
Developers guidelines | Signing applications The image below gives an overview of the steps to go through for applications requiring basic and extended set capabilities compared to when also manufacturer approved capabilites are required. Extended Capabilities Manufacturer Capabilities (optional basic) Register on Symbian Signed Register on Symbian Signed Download the DevCertRequest tool (generate a Certified Symbian Request (.
Developers guidelines | Signing applications • Name and path for the certificate request (.csr) file to be generated. It is possible to select an existing file that will be overwritten. • Private key and password. An ACS publisher ID certificate and its private key can be used, in which case the tool allows more capabilities and IMEIs to be selected in the following steps. It is also possible to select an existing private key or let the tool generate a new one. • Personal information.
Developers guidelines | Signing applications 4. Upload the .csr file. When uploaded, the request is forwarded to Sony Ericsson, where a steering group reviews the request. Their decision is communicated to the developer via Symbian Signed. 5. When approved, the developer certificate can be viewed and checked and that its capabilities and IMEIs are the requested via login to the Symbian Signed account. 6. Download the certificate.
Developers guidelines | Signing applications • Policy statement dialog The application should launch a policy statement dialog at the very first application startup, The dialog should summarize the use of network access, local connectivity, multimedia recording, read/write user data, phone call and location. • PKG file format Make sure that "Localized Vendor name" and "Unique Vendor name" are consistent with the valid ACS publisher ID and with UID/SID/VID values.
Developers guidelines | Signing applications 3. Sony Ericsson grants the developer access to a login protected Sony Ericsson channel certifier web page on the Symbian Signed website. Via this page the developer can submit the application for testing against the Symbian Signed criteria as well as the Sony Ericsson specific criteria. 4. The testing and signing process from now on follows the standard process as described above.
Developers guidelines | Signing applications Appendix 28 October 2006
Developers guidelines | Signing applications Functions listed by capability In the list, text within curly brackets { } indicates other capabilities that the function is associated with. The text “Dependent” in curly brackets indicates that the association with the capability is conditional.
Developers guidelines | Signing applications Capability: DiskAdmin RFormat::Next(TInt &);{} RFormat::Next(TPckgBuf< TInt > &,TRequestStatus &);{} RFs::AddFileSystem(const TDesC &)const;{} RFs::AddPlugin(const TDesC &)const;{} RFs::CheckDisk(const TDesC &)const;{} RFs::ClearPassword(TInt,const TMediaPassword &);{} RFs::DismountFileSystem(const TDesC &,TInt)const;{} RFs::DismountPlugin(const TDesC &)const;{} RFs::DismountPlugin(const TDesC &,TInt)const;{} RFs::DismountPlugin(const TDesC &,TInt,TInt)const;{}
Developers guidelines | Signing applications RFs::UnlockDrive(TInt,const TMediaPassword &,TBool);{} RRawDisk::Open(RFs &,TInt);{} RRawDisk::Read(TInt64,TDes8 &);{} RRawDisk::Write(TInt64,TDesC8 &);{} Capability: Drm ContentAccess::CAgentContent::AgentSpecificCommand(TInt,const TDesC8 &,TDes8 &)=0;{} ContentAccess::CAgentContent::AgentSpecificCommand(TInt,const TDesC8 &,TDes8 &,TRequestStatus &)=0;{} ContentAccess::CAgentContent::CancelNotifyStatusChange(TRequestStatus &,const TDesC &)=0;{} ContentAccess::
Developers guidelines | Signing applications ContentAccess::CAgentData::GetStringAttribute(TInt,TDes &)=0;{} ContentAccess::CAgentData::Read(TDes8 &)=0;{} ContentAccess::CAgentData::Read(TDes8 &,TInt)=0;{} ContentAccess::CAgentData::Read(TDes8 &,TInt,TRequestStatus &)=0;{} ContentAccess::CAgentData::Read(TDes8 &,TRequestStatus &)=0;{} ContentAccess::CAgentData::Seek(TSeek,TInt &)=0;{} ContentAccess::CAgentData::SetProperty(TAgentProperty,TInt)=0;{} ContentAccess::CAgentImportFile::GetImportStatus()const=0;
Developers guidelines | Signing applications ContentAccess::CAgentManager::SetProperty(TAgentProperty,TInt)=0;{} ContentAccess::CAgentRightsManager::DeleteAllRightsObjects(const TVirtualPathPtr &)=0;{} ContentAccess::CAgentRightsManager::DeleteRightsObject(const CRightsInfo &)=0;{} ContentAccess::CAgentRightsManager::GetRightsDataL(const CRightsInfo &)const=0;{} ContentAccess::CAgentRightsManager::ListAllRightsL(RStreamablePtrArray< CRightsInfo > &)const=0;{} ContentAccess::CAgentRightsManager::ListContent
Developers guidelines | Signing applications ContentAccess::CContent::GetStringAttribute(TInt,TDes &,const TDesC &)const;{} ContentAccess::CContent::GetStringAttributeSet(RStringAttributeSet &)const;{} ContentAccess::CContent::GetStringAttributeSet(RStringAttributeSet &,const TDesC &)const;{} ContentAccess::CContent::NewAttributeL(TBool);{} ContentAccess::CContent::NewAttributeL(TBool,TContentShareMode);{} ContentAccess::CContent::NewL(RFile &);{} ContentAccess::CContent::NewL(const TDesC &);{} ContentAcce
Developers guidelines | Signing applications ContentAccess::CData::Read(TDes8 &)const;{} ContentAccess::CData::Read(TDes8 &,TInt)const;{} ContentAccess::CData::Read(TDes8 &,TInt,TRequestStatus &)const;{} ContentAccess::CData::Read(TDes8 &,TRequestStatus &)const;{} ContentAccess::CData::Seek(TSeek,TInt &)const;{} ContentAccess::CData::SetProperty(TAgentProperty,TInt);{} ContentAccess::CImportFile::GetImportStatus()const;{} ContentAccess::CImportFile::OutputFileL(TInt)const;{} ContentAccess::CImportFile::Wri
Developers guidelines | Signing applications ContentAccess::CManager::SetProperty(TAgentProperty,TInt);{} ContentAccess::CRightsInfo::Description()const;{} ContentAccess::CRightsInfo::RightsStatus()const;{} ContentAccess::CRightsInfo::RightsType()const;{} ContentAccess::CRightsInfo::UniqueId()const;{} ContentAccess::CRightsManager::DeleteAllRightsObjects(const TVirtualPathPtr &);{} ContentAccess::CRightsManager::DeleteRightsObject(const CRightsInfo &);{} ContentAccess::CRightsManager::GetRightsDataL(const
Developers guidelines | Signing applications CBluetoothSynchronousLink::NewL(MBluetoothSynchronousLinkNotifier &,RSocketServ &);{} CBluetoothSynchronousLink::NewLC(MBluetoothSynchronousLinkNotifier &,RSocketServ &);{} CSdpAgent::AttributeRequestL(MSdpElementBuilder *,TSdpServRecordHandle,TSdpAttributeID);{} CSdpAgent::AttributeRequestL(MSdpElementBuilder *,TSdpServRecordHandle,const CSdpAttrIdMatchList &);{} CSdpAgent::AttributeRequestL(TSdpServRecordHandle,TSdpAttributeID);{} CSdpAgent::AttributeRequestL(
Developers guidelines | Signing applications RSdpDatabase::CreateServiceRecordL(CSdpAttrValueDES &,TSdpServRecordHandle &);{} RSdpDatabase::CreateServiceRecordL(const TUUID &,TSdpServRecordHandle &);{} RSdpDatabase::DeleteAttributeL(TSdpServRecordHandle,TSdpAttributeID);{} RSdpDatabase::DeleteRecordL(TSdpServRecordHandle);{} RSdpDatabase::Open(RSdp &);{} RSdpDatabase::RSdpDatabase();{} RSdpDatabase::UpdateAttributeL(TSdpServRecordHandle,TSdpAttributeID,CSdpAttrValue &);{} RSdpDatabase::UpdateAttributeL(TSd
Developers guidelines | Signing applications Capability: MultimediaDD CCamera::NewL(MCameraObserver2 &,TInt,TInt);{UserEnvironment} CDevASR::SetPrioritySettings(const TMMFPrioritySettings &);{} CMMFController::SetPrioritySettings(const TMMFPrioritySettings &)=0;{} CMMFUrlSink::SetSinkPrioritySettings(const TMMFPrioritySettings &);{} CMMFUrlSource::SetSourcePrioritySettings(const TMMFPrioritySettings &);{} CMMTunerUtility::SetPriority(TTunerAccessPriority);{} CMdaAudioConvertUtility::NewL(MMdaObjectStateCha
Developers guidelines | Signing applications CMmfGlobalAudioEffect::SetSettingsByUidL(TUid);{} CSpeechRecognitionUtility::SetAudioPriority(TInt,TInt,TInt,TInt);{} CVideoPlayerUtility::NewL(MVideoPlayerUtilityObserver &,TInt,TMdaPriorityPreference,RWsSession &,CWsScreenDevice &,RWindowBase &,const TRect &,const TRect &);{} CVideoPlayerUtility::SetPriorityL(TInt,TMdaPriorityPreference);{} CVideoRecorderUtility::NewL(MVideoRecorderUtilityObserver &,TInt,TMdaPriorityPreference);{} CVideoRecorderUtility::SetPri
Developers guidelines | Signing applications RCall::AnswerIncomingCall(const TDesC8 &)const;{NetworkServices} RCall::AnswerIncomingCallCancel()const;{NetworkServices} RCall::Dial(TRequestStatus &,const TDesC8 &,const TTelNumberC &);{NetworkServices} RCall::Dial(TRequestStatus &,const TTelNumberC &);{NetworkServices} RCall::Dial(const TDesC8 &,const TTelNumberC &)const;{NetworkServices} RCall::Dial(const TTelNumberC &)const;{NetworkServices} RCall::DialCancel()const;{NetworkServices} RCall::LoanDataPort(TCo
Developers guidelines | Signing applications RMobilePhone::SetSmartCardApplicationStatus(TRequestStatus &,const TAID &,TSmartCardApplicationAction)const;{WriteDeviceData} RMobilePhone::UpdateScFile(TRequestStatus &,const TScFilePathWithAccessOffsets &,TDes8 &)const;{WriteDeviceData} RMobileSmsMessaging::AckSmsStored(TRequestStatus &,const TDesC8 &,TBool)const;{NetworkServices} RMobileSmsMessaging::NackSmsStored(TRequestStatus &,const TDesC8 &,TInt)const;{NetworkServices} RMobileSmsMessaging::ResumeSmsRecep
Developers guidelines | Signing applications RSat::ClientSatProfileIndication(const TDesC8 &)const;{WriteDeviceData} RSat::EventDownload(TRequestStatus &,TEventList,const TDesC8 &)const;{WriteDeviceData} RSat::MenuSelection(TRequestStatus &,const TDesC8 &)const;{ReadDeviceData} RSat::NotifyCallControlRequest(TRequestStatus &,TDes8 &)const;{ReadDeviceData} RSat::NotifyCbDownload(TRequestStatus &,TDes8 &)const;{ReadUserData} RSat::NotifyMoSmControlRequest(TRequestStatus &,TDes8 &)const;{ReadDeviceData} RSat:
Developers guidelines | Signing applications CExtensionBase::CExtensionBase();{} CExtensionBase::Copy(const CExtensionBase &)=0;{} CExtensionBase::CreateL()=0;{} CExtensionBase::Data()=0;{} CExtensionBase::ParseMessage(const TDesC8 &)=0;{} CExtensionBase::Type()const;{} CExtensionBase::~CExtensionBase();{} CFaxTransfer::Start(TRequestStatus &);{ReadUserData, WriteUserData} CFaxTransfer::Stop();{ReadUserData, WriteUserData} CRetrieveMobilePhoneCBList::Start(TRequestStatus &,RMobilePhone::TMobilePhoneCBCondi
Developers guidelines | Signing applications CTelephony::Hangup(TRequestStatus &,const TCallId &)const;{} CTelephony::Hold(TRequestStatus &,const TCallId &)const;{} CTelephony::Resume(TRequestStatus &,const TCallId &)const;{} CTelephony::SendDTMFTones(TRequestStatus &,const TDesC &)const;{} CTelephony::Swap(TRequestStatus &,const TCallId &,const TCallId &)const;{} MQoSObserver::Event(const CQoSEventBase &)=0;{} RCall::AcquireOwnership(TRequestStatus &)const;{} RCall::AcquireOwnershipCancel()const;{} RCall:
Developers guidelines | Signing applications RCall::LoanDataPort(TRequestStatus &,TCommPort &);{NetworkControl} RCall::RecoverDataPort()const;{NetworkControl} RCall::TransferOwnership()const;{} RCdmaMobileCall::NotifyIncomingNetworkFlashWithInfo(TRequestStatus &,TDes8 &)const;{ReadUserData} RCdmaMobileCall::ResumeConnect(TRequestStatus &,const TBool)const;{} RCdmaMobileCall::SendNetworkFlashWithInfo(TRequestStatus &,const TDes8 &)const;{} RCdmaMobilePhone::EndEmergencyMode(TRequestStatus &)const;{NetworkCo
Developers guidelines | Signing applications RMobileCall::DialNoFdnCheck(TRequestStatus &,const TDesC8 &,const TDesC &)const;{NetworkControl} RMobileCall::GoOneToOne(TRequestStatus &)const;{} RMobileCall::HangupWithUUI(TRequestStatus &,const TMobileCallUUI &)const;{WriteUserData} RMobileCall::Hold(TRequestStatus &)const;{} RMobileCall::NotifyPrivacyConfirmation(TRequestStatus &,RMobilePhone::TMobilePhonePrivacy &)const;{} RMobileCall::NotifyTrafficChannelConfirmation(TRequestStatus &,TMobileCallTch &)const
Developers guidelines | Signing applications RMobilePhone::SendDTMFTones(TRequestStatus &,const TDesC &)const;{} RMobilePhone::SendNetworkServiceRequest(TRequestStatus &,const TDesC &)const;{WriteDeviceData} RMobilePhone::SendNetworkServiceRequestNoFdnCheck(TRequestStatus &,const TDesC &)const;{NetworkControl, WriteDeviceData} RMobilePhone::SetCallBarringPassword(TRequestStatus &,const TMobilePhonePasswordChangeV1 &)const;{WriteDeviceData} RMobilePhone::SetCallBarringStatus(TRequestStatus &,TMobilePhoneCBC
Developers guidelines | Signing applications RPacketContext::AddMediaAuthorizationL(TRequestStatus &,CTFTMediaAuthorizationV3 &)const;{WriteDeviceData} RPacketContext::AddPacketFilter(TRequestStatus &,const TDesC8 &)const;{WriteDeviceData} RPacketContext::CreateNewTFT(TRequestStatus &,const TInt)const;{} RPacketContext::Deactivate(TRequestStatus &)const;{} RPacketContext::DeleteTFT(TRequestStatus &)const;{} RPacketContext::GetPacketFilterInfo(TRequestStatus &,TInt,TDes8 &)const;{ReadDeviceData} RPacketCont
Developers guidelines | Signing applications RSyncMLDevManJob::CreateL(RSyncMLSession &,TSmlProfileId,TSmlConnectionId);{LocalServices} Capability: PowerMgmt Power::CancelWakeupEventNotification();{} Power::DisableWakeupEvents();{} Power::EnableWakeupEvents(TPowerState);{} Power::PowerDown();{} Power::RequestWakeupEventNotification(TRequestStatus &);{} RProcess::Kill(TInt);{} RProcess::Panic(const TDesC &,TInt);{} RProcess::Terminate(TInt);{} RWsSession::RequestOffEvents(TBool,RWindowTreeNode *);{} UserHa
Developers guidelines | Signing applications CRetrieveMobilePhoneCFList::Start(TRequestStatus &,RMobilePhone::TMobilePhoneCFCondition,RMobilePhone::TMobileInfoLocation);{NetworkServices} CRetrieveMobilePhoneCWList::RetrieveListL();{} CRetrieveMobilePhoneCWList::Start(TRequestStatus &,RMobilePhone::TMobileInfoLocation);{NetworkServices} CRetrieveMobilePhoneCcbsList::RetrieveListL();{} CRetrieveMobilePhoneCcbsList::Start(TRequestStatus &);{NetworkServices} CRetrieveMobilePhoneDetectedNetworks::Start(TRequest
Developers guidelines | Signing applications CTelephony::GetSubscriberId(TRequestStatus &,TDes8 &)const;{} RBTRegistry::CreateView(const TBTRegistrySearch &,TRequestStatus &);{LocalServices} RBTRegistry::GetDevice(TBTNamelessDevice &,TRequestStatus &);{LocalServices} RCdmaMobilePhone::ProcessOtaRequest(TRequestStatus &,const TDesC8 &,TDes8 &)const;{NetworkServices, WriteDeviceData} RCdmaMobilePhone::ReadOtaStoreBlock(TRequestStatus &,TDes8 &,TDes8 &)const;{} RMobileCall::GetMobileDataCallRLPRange(TRequestS
Developers guidelines | Signing applications RMobilePhone::GetSubscriberId(TRequestStatus &,TMobilePhoneSubscriberId &)const;{} RMobilePhone::NotifyCurrentNetworkChange(TRequestStatus &,TDes8 &,TMobilePhoneLocationAreaV1 &)const;{Location} RMobilePhone::NotifyDefaultPrivacyChange(TRequestStatus &,TMobilePhonePrivacy &)const;{NetworkControl} RMobilePhone::NotifyIccMessageWaitingIndicatorsChange(TRequestStatus &,TDes8 &)const;{} RMobilePhone::NotifyLockInfoChange(TRequestStatus &,TMobilePhoneLock &,TDes8 &)c
Developers guidelines | Signing applications RSat::NotifyDisplayTextPCmd(TRequestStatus &,TDes8 &)const;{} RSat::NotifyGetServiceInfoPCmd(TRequestStatus &,TDes8 &)const;{} RSat::NotifyLaunchBrowserPCmd(TRequestStatus &,TDes8 &)const;{} RSat::NotifyLocalInfoPCmd(TRequestStatus &,TDes8 &)const;{} RSat::NotifyMoSmControlRequest(TRequestStatus &,TDes8 &)const;{NetworkControl} RSat::NotifyOpenChannelPCmd(TRequestStatus &,TDes8 &)const;{} RSat::NotifyPerformCardApduPCmd(TRequestStatus &,TDes8 &)const;{} RSat::No
Developers guidelines | Signing applications CAgnEntry::OpenEmbeddedStoreL();{} CAgnEntry::UpdateNotesTextL();{WriteUserData} CAgnEntryManager::UpdateEntryL(CAgnEntry *,TStreamId &);{} CAgnEntryModel::AddEntryL(CAgnEntry *,TAgnEntryId);{WriteUserData} CAgnEntryModel::AddTodoListL(CAgnTodoList *,TInt);{WriteUserData} CAgnEntryModel::BuildTodoListsL();{} CAgnEntryModel::CategoryL(TInt)const;{} CAgnEntryModel::ChangeTodoListOrderL(TInt,TInt);{WriteUserData} CAgnEntryModel::ChangeTodoOrderL(CAgnTodoList *,TAgn
Developers guidelines | Signing applications CAgnEntryModel::FetchGsEntryL(const HBufC8 &)const;{} CAgnEntryModel::FetchGsEntryL(const HBufC8 &,TTime)const;{} CAgnEntryModel::GetGuidL(const CAgnEntry &)const;{} CAgnEntryModel::GetLiteEntryFromServerL(TAgnEntryId,CAgnSortEntryAllocator *)const;{} CAgnEntryModel::GetRecurrenceIdL(const CAgnEntry &)const;{} CAgnEntryModel::OpenL(const TDesC &,TTimeIntervalMinutes,TTimeIntervalMinutes,TTimeIntervalMinutes);{} CAgnEntryModel::PasteEntryL(CAgnEntry *,TAgnEntryId
Developers guidelines | Signing applications CAgnModel::AddTodoListL(CAgnTodoList *,TInt);{WriteUserData} CAgnModel::CutInstanceL(CAgnEntry *,TAgnWhichInstances);{WriteUserData} CAgnModel::CutInstanceL(const TAgnInstanceId &,TAgnWhichInstances);{WriteUserData} CAgnModel::DeleteInstanceL(CAgnEntry *,TAgnWhichInstances);{WriteUserData} CAgnModel::DeleteTodoListL(CAgnTodoList *);{WriteUserData} CAgnModel::DeleteTodoListL(TAgnTodoListId);{WriteUserData} CAgnModel::PopulateTodoInstanceListL(CAgnTodoInstanceList
Developers guidelines | Signing applications CContactDatabase::GetDefaultNameL(TDes &);{} CContactDatabase::GetSpeedDialFieldL(TInt,TDes &);{} CContactDatabase::ListDatabasesL();{} CContactDatabase::ListDatabasesL(TDriveUnit);{} CContactDatabase::MatchPhoneNumberL(const TDesC &,TInt);{} CContactDatabase::Open(TRequestStatus &,TThreadAccess);{} CContactDatabase::Open(const TDesC &,TRequestStatus &,TThreadAccess);{} CContactDatabase::OpenL(TThreadAccess);{} CContactDatabase::OpenL(const TDesC &,TThreadAccess
Developers guidelines | Signing applications CContactNamedRemoteView::NewL(MContactViewObserver &,const TDesC &,const CContactDatabase &,const RContactViewSortOrder &,TContactViewPreferences);{} CContactNamedRemoteView::NewL(MContactViewObserver &,const TDesC &,const CContactDatabase &,const RContactViewSortOrder &,TContactViewPreferences,const TDesC8 &);{} CContactRemoteView::CContactViewBase_Reserved_1(TFunction,TAny *);{} CContactRemoteView::ConstructL(MContactViewObserver &,const RContactViewSortOrder
Developers guidelines | Signing applications CContactViewBase::CContactViewBase_Reserved_1(TFunction,TAny *);{} CContactViewBase::ContactAtL(TInt)const=0;{} CContactViewBase::ContactViewPreferences()=0;{} CContactViewBase::ContactsMatchingCriteriaL(const MDesC16Array &,RPointerArray< CViewContact > &);{} CContactViewBase::ContactsMatchingPrefixL(const MDesC16Array &,RPointerArray< CViewContact > &);{} CContactViewBase::CountL()const=0;{} CContactViewBase::FindL(TContactItemId)const=0;{} CContactViewBase::G
Developers guidelines | Signing applications CTelephony::GetCallInfo(TDes8 &,TDes8 &,TDes8 &)const;{} CTelephony::GetCurrentNetworkInfo(TRequestStatus &,TDes8 &)const;{Location, ReadDeviceData} CTelephony::GetCurrentNetworkName(TRequestStatus &,TDes8 &)const;{} CTelephony::GetOperatorName(TRequestStatus &,TDes8 &)const;{} CUnifiedCertStore::Retrieve(const CCTCertInfo &,CCertificate *&,TRequestStatus &);{} CUnifiedCertStore::Retrieve(const CCTCertInfo &,TDes8 &,TRequestStatus &);{} CUnifiedKeyStore::ExportE
Developers guidelines | Signing applications RAgendaServ::RefreshTodoListListL(CAgnTodoListList *,CAgnDeletedTodoListList *);{} RAgendaServ::RestoreNotesTextL(TStreamId);{} RAgendaServ::UpdateEntryL(CAgnEntry *,TAgnEntryId);{WriteUserData} RCdmaMobileCall::NotifyIncomingNetworkFlashWithInfo(TRequestStatus &,TDes8 &)const;{NetworkServices} RCdmaMobilePhone::NotifyIncomingInfoRecord(TRequestStatus &,TDes8 &)const;{} RContactRemoteView::AllFieldsLC(TInt,const TDesC &)const;{} RContactRemoteView::AtL(TInt)cons
Developers guidelines | Signing applications RMobileBroadcastMessaging::NotifyLanguageFilterChange(TRequestStatus &,TDes16 &)const;{} RMobileCall::GetMobileCallInfo(TDes8 &)const;{} RMobileCall::NotifyRemotePartyInfoChange(TRequestStatus &,TDes8 &)const;{} RMobileCall::ReceiveUUI(TRequestStatus &,TMobileCallUUI &)const;{NetworkServices} RMobilePhone::GetAirTimeDuration(TTimeIntervalSeconds &)const;{} RMobilePhone::GetCostInfo(TRequestStatus &,TDes8 &)const;{} RMobilePhone::GetCurrentNetwork(TRequestStatus
Developers guidelines | Signing applications RMsvServerSession::DeleteAttachment(TMsvId,const TDesC &);{None, WriteDeviceData, WriteUserData} RMsvServerSession::DeleteEntriesL(const CMsvEntrySelection &,TMsvOp);{None, WriteDeviceData, WriteUserData} RMsvServerSession::DeleteEntriesL(const CMsvEntrySelection &,TMsvOp,TRequestStatus &);{None, WriteDeviceData, WriteUserData} RMsvServerSession::DeleteFileStoreL(TMsvId);{None, WriteDeviceData, WriteUserData} RMsvServerSession::GetChildIdsL(TMsvId,const CMsvEntr
Developers guidelines | Signing applications RPhoneBookSession::DoSynchronisation(TRequestStatus &,TUid);{WriteUserData} RPhoneBookSession::ShutdownServer(TBool);{WriteUserData} RPhoneBookSession::ValidateContact(MContactSynchroniser::TValidateOperation,TContactItemId);{} RSat::NotifyCbDownload(TRequestStatus &,TDes8 &)const;{NetworkControl} RSat::NotifySetUpCallPCmd(TRequestStatus &,TDes8 &)const;{} RSat::NotifySmsPpDownload(TRequestStatus &,TDes8 &)const;{NetworkControl} RWorldServer::Home(TWorldId &)con
Developers guidelines | Signing applications RWsSession::SimulateKeyEvent(TKeyEvent);{} RWsSession::SimulateRawEvent(TRawEvent);{} UserSvr::AddEvent(const TRawEvent &);{} Capability: Tcb RLocalDrive::Connect(TInt,TBool &);{} TBusLocalDrive::Connect(TInt,TBool &);{} Capability: TrustedUI Capability: UserEnvironment CCamera::NewDuplicateL(MCameraObserver &,TInt);{} CCamera::NewDuplicateL(MCameraObserver2 &,TInt);{} CCamera::NewL(MCameraObserver &,TInt);{} CCamera::NewL(MCameraObserver2 &,TInt,TInt);{Multim
Developers guidelines | Signing applications CCoeEnv::InstallFepL(TUid,const TBool);{} CCoeFep::IsTurnedOffByL(const TKeyEvent &)const;{} CCoeFep::IsTurnedOnByL(const TKeyEvent &)const;{} CCoeFep::WriteAttributeDataAndBroadcastL(TUid);{} CCoeFep::WriteAttributeDataAndBroadcastL(const TArray< TUid > &);{} CEikonEnv::UpdateSystemColorListL(const CColorList &);{} CFepGenericGlobalSettings::StoreChangesAndBroadcastL();{} CLogClient::AddEventType(const CLogEventType &,TRequestStatus &);{} CLogClient::ChangeConf
Developers guidelines | Signing applications CSmsSimParamOperation::WriteSimParamsL(const CMobilePhoneSmspList &,TUid,TMsvId,CMsvSession &,TRequestStatus &);{} CUnifiedCertStore::Remove(const CCTCertInfo &,TRequestStatus &);{WriteUserData} CUnifiedCertStore::SetApplicability(const CCTCertInfo &,const RArray< TUid > &,TRequestStatus &);{} CUnifiedCertStore::SetTrust(const CCTCertInfo &,TBool,TRequestStatus &);{} CWsScreenDevice::SetCurrentRotations(TInt,CFbsBitGc::TGraphicsOrientation)const;{} CWsScreenDevi
Developers guidelines | Signing applications RBTRegistry::UnpairDevice(const TBTDevAddr &,TRequestStatus &);{LocalServices} RCall::SetFaxSettings(const TFaxSessionSettings &)const;{} RCdmaMobilePhone::LockNam(TRequestStatus &,TMobilePhoneNamCommitStatus)const;{} RCdmaMobilePhone::ProcessOtaRequest(TRequestStatus &,const TDesC8 &,TDes8 &)const;{NetworkServices, ReadDeviceData} RCdmaMobilePhone::SetDTMFBurstDuration(TRequestStatus &,TMobilePhoneDtmfOnDuration,TMobilePhoneDtmfOffDuration)const;{} RCdmaMobileP
Developers guidelines | Signing applications RMobilePhone::ProgramFeatureCode(TRequestStatus &,const TDesC &,TMobilePhoneNetworkService,TMobilePhoneServiceAction)const;{} RMobilePhone::SelectNetwork(TRequestStatus &,TBool,const TMobilePhoneNetworkManualSelection &)const;{NetworkServices} RMobilePhone::SendNetworkServiceRequest(TRequestStatus &,const TDesC &)const;{NetworkServices} RMobilePhone::SendNetworkServiceRequestNoFdnCheck(TRequestStatus &,const TDesC &)const;{NetworkControl, NetworkServices} RMobil
Developers guidelines | Signing applications RMobilePhone::SetPersonalisationStatus(TRequestStatus &,const TMobilePhonePersonalisation,const TDes &)const;{NetworkControl} RMobilePhone::SetPuct(TRequestStatus &,const TDesC8 &)const;{} RMobilePhone::SetSSPassword(TRequestStatus &,const TDesC8 &,const TInt)const;{NetworkServices} RMobilePhone::SetSmartCardApplicationStatus(TRequestStatus &,const TAID &,TSmartCardApplicationAction)const;{NetworkControl} RMobilePhone::SetUSimApplicationStatus(TRequestStatus &,c
Developers guidelines | Signing applications RMsvServerSession::CreateEntryL(const TMsvEntry &,TMsvOp,TSecureId,TRequestStatus &);{None, ReadUserData, WriteUserData} RMsvServerSession::DeInstallMtmGroup(const TDesC &);{} RMsvServerSession::DeleteAttachment(TMsvId,const TDesC &);{None, ReadUserData, WriteUserData} RMsvServerSession::DeleteEntriesL(const CMsvEntrySelection &,TMsvOp);{None, ReadUserData, WriteUserData} RMsvServerSession::DeleteEntriesL(const CMsvEntrySelection &,TMsvOp,TRequestStatus &);{None
Developers guidelines | Signing applications RPacketService::SetPreferredBearer(TRequestStatus &,TPreferredBearer)const;{NetworkServices} RProperty::Define(TUid,TUint,TInt,const TSecurityPolicy &,const TSecurityPolicy &,TInt);{} RProperty::Define(TUint,TInt,const TSecurityPolicy &,const TSecurityPolicy &,TInt);{} RSat::ClientSatProfileIndication(const TDesC8 &)const;{NetworkControl} RSat::EventDownload(TRequestStatus &,TEventList,const TDesC8 &)const;{NetworkControl} RSat::RefreshAllowed(TRequestStatus &,c
Developers guidelines | Signing applications RWsSession::SetKeyboardRepeatRate(const TTimeIntervalMicroSeconds32 &,const TTimeIntervalMicroSeconds32 &);{} RWsSession::SetModifierState(TEventModifier,TModifierState);{} RWsSession::SetPointerCursorArea(TInt,const TRect &);{} RWsSession::SetPointerCursorPosition(const TPoint &);{} RWsSession::SetSystemFaded(TBool);{} RWsSession::SetSystemFaded(TBool,TUint8,TUint8);{} TExtendedLocale::SaveSystemSettings();{} TExtendedLocale::SetCurrencySymbol(const TDesC &);{}
Developers guidelines | Signing applications CAgnEntryModel::AddEntryL(CAgnEntry *,TAgnEntryId);{ReadUserData} CAgnEntryModel::AddEntryL(CAgnEntry *,TAgnEntryId,TCommit,TUseExistingUniqueId);{} CAgnEntryModel::AddGsChildExceptionEntryL(CAgnEntry *,TAgnUniqueId,TGsBasicData,TTime);{} CAgnEntryModel::AddGsChildRuleEntryL(CAgnEntry *,TAgnUniqueId,TGsBasicData,TTime);{} CAgnEntryModel::AddGsEntryL(CAgnEntry *,HBufC8 *,TGsBasicData);{} CAgnEntryModel::AddTodoListL(CAgnTodoList *,TInt);{ReadUserData} CAgnEntryMo
Developers guidelines | Signing applications CAgnEntryModel::UnregisterObserverL(TUid);{} CAgnEntryModel::UpdateEntryL(CAgnEntry *,TAgnEntryId);{ReadUserData} CAgnEntryModel::UpdateObserverControllerL();{} CAgnEntryModel::UpdateTodoListL(CAgnTodoList *);{ReadUserData} CAgnIndexedModel::DeleteTidiedEntriesL();{ReadUserData} CAgnIndexedModel::DoTidyByDateStepL();{ReadUserData} CAgnIndexedModel::DoTidyByTodoListStepL();{ReadUserData} CAgnIndexedModel::SetUpTidyByDateL(const TAgnFilter &,const TTime &,CStreamS
Developers guidelines | Signing applications CCalEntryView::DeleteL(const CDesC8Array &);{} CCalEntryView::StoreL(const RPointerArray< CCalEntry > &,TInt &);{} CCalEntryView::UpdateL(const RPointerArray< CCalEntry > &,TInt &);{} CCalInstanceView::DeleteL(CCalInstance *,CalCommon::TRecurrenceRange);{} CCalSession::CreateCalFileL(const TDesC &)const;{} CCalSession::DeleteCalFileL(const TDesC &)const;{} CContactDatabase::CheckAndUpdatePhoneTableL();{} CContactDatabase::CommitContactL(const CContactItem &);{Re
Developers guidelines | Signing applications CContactDatabase::ResetServerSpeedDialsL();{} CContactDatabase::SetCurrentDatabase(const TDesC &)const;{} CContactDatabase::SetCurrentItem(const TContactItemId);{} CContactDatabase::SetDatabaseDriveL(TDriveUnit,TBool);{} CContactDatabase::SetFieldAsSpeedDialL(CContactItem &,TInt,TInt);{ReadUserData} CContactDatabase::UpdateContactLC(TContactItemId,CContactItem *);{ReadUserData} CContactDatabase::UpdateExistingContactL(CContactItem &);{} CContactDatabase::doAddNe
Developers guidelines | Signing applications CSmsHeader::StoreL(CMsvStore &)const;{} CUnifiedCertStore::Remove(const CCTCertInfo &,TRequestStatus &);{WriteDeviceData} CUnifiedKeyStore::CreateKey(TInt,TKeyUsagePKCS15,TUint,const TDesC &,CCTKeyInfo::EKeyAlgorithm,TInt,TTime,TTime,CCTKeyInfo *&,TRequestStatus &);{} CUnifiedKeyStore::DeleteKey(TCTTokenObjectHandle,TRequestStatus &);{} CUnifiedKeyStore::ImportKey(TInt,const TDesC8 &,TKeyUsagePKCS15,const TDesC &,TInt,TTime,TTime,CCTKeyInfo *&,TRequestStatus &);
Developers guidelines | Signing applications RAgendaServ::DeleteTodoList(TAgnUniqueId);{} RAgendaServ::DeleteTodoListL(CAgnTodoList *);{} RAgendaServ::IncEntryRefCountL(const TAgnUniqueId);{} RAgendaServ::IncEntryRefCountsL(const CArrayFix< TAgnUniqueId > &);{} RAgendaServ::QueueNextAlarmL(const TTime &,CArrayFixFlat< TAgnSortInstance > *,CAgnSortEntryAllocator *);{} RAgendaServ::SaveTodoListsL(TFileName);{} RAgendaServ::SetDefaultDisplayTimes(TTimeIntervalMinutes,TTimeIntervalMinutes,TTimeIntervalMinutes)
Developers guidelines | Signing applications RMsvServerSession::ChangeAttributesL(const CMsvEntrySelection &,TUint,TUint);{} RMsvServerSession::ChangeEntryL(const TMsvEntry &,TMsvOp,TSecureId);{None, ReadUserData, WriteDeviceData} RMsvServerSession::ChangeEntryL(const TMsvEntry &,TMsvOp,TSecureId,TRequestStatus &);{None, ReadUserData, WriteDeviceData} RMsvServerSession::CopyEntriesL(const CMsvEntrySelection &,TMsvId,TMsvOp);{None, ReadUserData} RMsvServerSession::CopyEntriesL(const CMsvEntrySelection &,TMs
Developers guidelines | Signing applications RPhoneBookSession::CancelRequest(TPhonebookSyncRequestCancel,TUid);{ReadUserData} RPhoneBookSession::DeleteContact(TRequestStatus &,TContactItemId);{} RPhoneBookSession::DoSynchronisation(TRequestStatus &);{ReadUserData} RPhoneBookSession::DoSynchronisation(TRequestStatus &,TUid);{ReadUserData} RPhoneBookSession::ShutdownServer(TBool);{ReadUserData} RPhoneBookSession::WriteContact(TRequestStatus &,CContactICCEntry &,TInt &);{} RPhoneBookSession::WriteContact(TRe
Developers guidelines | Signing applications MCTKeyStoreManager::ExportEncryptedKey(TCTTokenObjectHandle,const CPBEncryptParms &,HBufC8 *&,TRequestStatus &)=0;{} MCTKeyStoreManager::ExportKey(TCTTokenObjectHandle,HBufC8 *&,TRequestStatus &)=0;{} MCTKeyStoreManager::SetManagementPolicy(TCTTokenObjectHandle,const TSecurityPolicy &,TRequestStatus &)=0;{} MCTKeyStoreManager::SetPassphraseTimeout(TInt,TRequestStatus &)=0;{} MCTKeyStoreManager::SetUsePolicy(TCTTokenObjectHandle,const TSecurityPolicy &,TRequestSt