1 Star 4 Fork 2

cbwang505 / win32k

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
a00665.html 643.45 KB
一键复制 编辑 Web IDE 原始数据 按行查看 历史
cbwang505 提交于 2020-01-04 20:32 . init
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Win32k: drvsup.c 文件参考</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Win32k
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','搜索');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('a00665.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#define-members">宏定义</a> &#124;
<a href="#typedef-members">类型定义</a> &#124;
<a href="#enum-members">枚举</a> &#124;
<a href="#func-members">函数</a> &#124;
<a href="#var-members">变量</a> </div>
<div class="headertitle">
<div class="title">drvsup.c 文件参考</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="a03629_source.html">precomp.h</a>&quot;</code><br />
<code>#include &quot;ntddvdeo.h&quot;</code><br />
</div>
<p><a href="a00665_source.html">浏览源代码.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
宏定义</h2></td></tr>
<tr class="memitem:accf086041259110de4bd6aac57f64279"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#accf086041259110de4bd6aac57f64279">DEFAULT_POS_VALUE</a>&#160;&#160;&#160;0x80000000</td></tr>
<tr class="separator:accf086041259110de4bd6aac57f64279"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a659e9e6483dce7cb60583d9b35f14de4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a659e9e6483dce7cb60583d9b35f14de4">DM_INTERNAL_VALID_FLAGS</a></td></tr>
<tr class="separator:a659e9e6483dce7cb60583d9b35f14de4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2ccdbdde9498b06c48c5eca065b9a1fd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a2ccdbdde9498b06c48c5eca065b9a1fd">DISPLAY_DEVICE_VGA_COMPATIBLE</a>&#160;&#160;&#160;0x00000010</td></tr>
<tr class="separator:a2ccdbdde9498b06c48c5eca065b9a1fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
类型定义</h2></td></tr>
<tr class="memitem:a01e58bda8aaf9059fe3ffa0ddd55567b"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01a">_DISP_DRIVER_REGISTRY_TYPE</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a01e58bda8aaf9059fe3ffa0ddd55567b">DISP_DRIVER_REGISTRY_TYPE</a></td></tr>
<tr class="separator:a01e58bda8aaf9059fe3ffa0ddd55567b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
枚举</h2></td></tr>
<tr class="memitem:a80592f8b0ad68fc0311741b0cbf6e01a"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01a">_DISP_DRIVER_REGISTRY_TYPE</a> { <a class="el" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa58218890fafaa0643a59e9294a9843d0">DispDriverRegGlobal</a>,
<a class="el" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa5ce32297dc3f6df4e82c6e0790d30063">DispDriverRegHardwareProfile</a>,
<a class="el" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa01ae391162e54069de625bdc7049e934">DispDriverRegHardwareProfileCreate</a>
}</td></tr>
<tr class="separator:a80592f8b0ad68fc0311741b0cbf6e01a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
函数</h2></td></tr>
<tr class="memitem:ad1a9b877f3705368d000061536e1b1fb"><td class="memItemLeft" align="right" valign="top">BOOL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#ad1a9b877f3705368d000061536e1b1fb">ProbeAndCaptureDeviceName</a> (PUNICODE_STRING Destination, PUNICODE_STRING Source)</td></tr>
<tr class="separator:ad1a9b877f3705368d000061536e1b1fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a744babe1f701ee80c5d81250e69c4db5"><td class="memItemLeft" align="right" valign="top">VOID&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a744babe1f701ee80c5d81250e69c4db5">UserSaveCurrentMode</a> (<a class="el" href="a00365.html#a07e239ec4a8e696c787df685bce70b61">PDESKTOP</a> pDesktop, <a class="el" href="a00365.html#a705d19f394c3e5adfaf34b991bd255b2">PPHYSICAL_DEV_INFO</a> physinfo, LPDEVMODEW lpdevmodeInformation)</td></tr>
<tr class="separator:a744babe1f701ee80c5d81250e69c4db5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae157271d2738ad5440f4428d44232e65"><td class="memItemLeft" align="right" valign="top">HANDLE&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#ae157271d2738ad5440f4428d44232e65">UserGetRegistryHandleFromDeviceMap</a> (PUNICODE_STRING deviceName, <a class="el" href="a00665.html#a01e58bda8aaf9059fe3ffa0ddd55567b">DISP_DRIVER_REGISTRY_TYPE</a> ParamType, BOOL bMatchBaseVideo, PNTSTATUS pStatus)</td></tr>
<tr class="separator:ae157271d2738ad5440f4428d44232e65"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a368e1b12420426ae8aaea867a5a40c98"><td class="memItemLeft" align="right" valign="top">NTSTATUS&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a368e1b12420426ae8aaea867a5a40c98">__EnumDisplayQueryRoutine</a> (IN PWSTR ValueName, IN ULONG ValueType, IN PVOID ValueData, IN ULONG ValueLength, IN PVOID Context, IN PVOID EntryContext)</td></tr>
<tr class="separator:a368e1b12420426ae8aaea867a5a40c98"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1178983eb56b481bd0bcb216f7d144cf"><td class="memItemLeft" align="right" valign="top">LPWSTR&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a1178983eb56b481bd0bcb216f7d144cf">UserGetDisplayDriverNames</a> (PUNICODE_STRING deviceName)</td></tr>
<tr class="separator:a1178983eb56b481bd0bcb216f7d144cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa8b64103d379d1cc9e91a96db783aa63"><td class="memItemLeft" align="right" valign="top">VOID&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#aa8b64103d379d1cc9e91a96db783aa63">UserLogDisplayDriverEvent</a> (DISP_DRIVER_LOG MsgType)</td></tr>
<tr class="separator:aa8b64103d379d1cc9e91a96db783aa63"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9060b90d884ff96a08e71aec773de234"><td class="memItemLeft" align="right" valign="top">NTSTATUS&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a9060b90d884ff96a08e71aec773de234">UserDriverExtraCallback</a> (PWSTR ValueName, ULONG ValueType, PVOID ValueData, ULONG ValueLength, PVOID Context, PVOID EntryContext)</td></tr>
<tr class="separator:a9060b90d884ff96a08e71aec773de234"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1496fe4e3afa850f6bd625b0c3542b78"><td class="memItemLeft" align="right" valign="top">NTSTATUS&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a1496fe4e3afa850f6bd625b0c3542b78">UserGetDisplayDriverParameters</a> (PUNICODE_STRING deviceName, PDEVMODEW pdevmode, BOOL bEmptyDevmode)</td></tr>
<tr class="separator:a1496fe4e3afa850f6bd625b0c3542b78"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a99ff717624d5af5628c02ebf95a506ce"><td class="memItemLeft" align="right" valign="top">NTSTATUS&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a99ff717624d5af5628c02ebf95a506ce">UserWriteDisplayDriverParameters</a> (ULONG RelativeTo, PWSTR Path, PDEVMODEW pdevmode, PRECT pRect)</td></tr>
<tr class="separator:a99ff717624d5af5628c02ebf95a506ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a74dce85d73485fdf46d61ce465e18061"><td class="memItemLeft" align="right" valign="top">NTSTATUS&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a74dce85d73485fdf46d61ce465e18061">UserSetDisplayDriverParameters</a> (PUNICODE_STRING deviceName, <a class="el" href="a00899.html#a66d45395271597521ff27e0a72253d9f">DISP_DRIVER_PARAM_TYPE</a> ParamType, PDEVMODEW pdevmode, PRECT pRect)</td></tr>
<tr class="separator:a74dce85d73485fdf46d61ce465e18061"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a64f37a06db6b3bcaf0b9bb15887675e6"><td class="memItemLeft" align="right" valign="top">HDEV&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a64f37a06db6b3bcaf0b9bb15887675e6">UserLoadDisplayDriver</a> (<a class="el" href="a00365.html#a705d19f394c3e5adfaf34b991bd255b2">PPHYSICAL_DEV_INFO</a> physinfo, PUNICODE_STRING deviceName, PUNICODE_STRING pstrDisplayDriver, LPDEVMODEW lpdevmodeInformation, BOOL bDefaultDisplay, BOOL bMulti, PDEVICE_LOCK *pDevLock)</td></tr>
<tr class="separator:a64f37a06db6b3bcaf0b9bb15887675e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a291aca25f546e197608f39e4887001a9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00365.html#a705d19f394c3e5adfaf34b991bd255b2">PPHYSICAL_DEV_INFO</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a291aca25f546e197608f39e4887001a9">UserGetDeviceFromName</a> (PUNICODE_STRING pstrDeviceName, ULONG bShareState)</td></tr>
<tr class="separator:a291aca25f546e197608f39e4887001a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae1691bdb53d715053026f55f68e5d3f4"><td class="memItemLeft" align="right" valign="top">VOID&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#ae1691bdb53d715053026f55f68e5d3f4">UserFreeDevice</a> (<a class="el" href="a00365.html#a705d19f394c3e5adfaf34b991bd255b2">PPHYSICAL_DEV_INFO</a> physInfo)</td></tr>
<tr class="separator:ae1691bdb53d715053026f55f68e5d3f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af58d084fab4188005b01c976f76bbefa"><td class="memItemLeft" align="right" valign="top">VOID&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#af58d084fab4188005b01c976f76bbefa">UserBuildDevmodeList</a> (<a class="el" href="a00365.html#a705d19f394c3e5adfaf34b991bd255b2">PPHYSICAL_DEV_INFO</a> physinfo)</td></tr>
<tr class="separator:af58d084fab4188005b01c976f76bbefa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8c6e355920ecb443e8d0f47bfbfff26d"><td class="memItemLeft" align="right" valign="top">VOID&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a8c6e355920ecb443e8d0f47bfbfff26d">UserReleaseDevmodeList</a> (<a class="el" href="a00365.html#a705d19f394c3e5adfaf34b991bd255b2">PPHYSICAL_DEV_INFO</a> physinfo)</td></tr>
<tr class="separator:a8c6e355920ecb443e8d0f47bfbfff26d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7f72492be72deb72088a46321f3703e9"><td class="memItemLeft" align="right" valign="top">NTSTATUS&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a7f72492be72deb72088a46321f3703e9">ProbeAndCaptureDevmode</a> (PUNICODE_STRING pstrDeviceName, PDEVMODEW *DestinationDevmode, PDEVMODEW SourceDevmode, BOOL bKernelMode)</td></tr>
<tr class="separator:a7f72492be72deb72088a46321f3703e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f0c711ec59537d55a52988377290e3c"><td class="memItemLeft" align="right" valign="top">VOID&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a5f0c711ec59537d55a52988377290e3c">UserDestroyHDEV</a> (HDEV hdev)</td></tr>
<tr class="separator:a5f0c711ec59537d55a52988377290e3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2422a3691562e077c000f1f99148dba8"><td class="memItemLeft" align="right" valign="top">HDEV&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a2422a3691562e077c000f1f99148dba8">UserCreateHDEV</a> (PUNICODE_STRING pstrDevice, LPDEVMODEW lpdevmodeInformation, <a class="el" href="a00365.html#a705d19f394c3e5adfaf34b991bd255b2">PPHYSICAL_DEV_INFO</a> *physdevinfo, PDEVICE_LOCK *pDevLock)</td></tr>
<tr class="separator:a2422a3691562e077c000f1f99148dba8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad7c3f68db698140187a708775e0e3c0e"><td class="memItemLeft" align="right" valign="top">HDC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#ad7c3f68db698140187a708775e0e3c0e">UserCreateExclusiveDC</a> (PUNICODE_STRING pstrDeviceName, PDEVMODEW pDevmode, PVOID *ppDevice)</td></tr>
<tr class="separator:ad7c3f68db698140187a708775e0e3c0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2d00e6c7566edba4539f45a026c4d150"><td class="memItemLeft" align="right" valign="top">VOID&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a2d00e6c7566edba4539f45a026c4d150">UserDeleteExclusiveDC</a> (HDC hdc, PVOID pDevice)</td></tr>
<tr class="separator:a2d00e6c7566edba4539f45a026c4d150"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5ab78c8fa70d3c1a63e786bc439ee73"><td class="memItemLeft" align="right" valign="top">VOID&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#ad5ab78c8fa70d3c1a63e786bc439ee73">InitUserScreen</a> (VOID)</td></tr>
<tr class="separator:ad5ab78c8fa70d3c1a63e786bc439ee73"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7c930cc47b4f158c545b3f7dbcdb75c5"><td class="memItemLeft" align="right" valign="top">NTSTATUS&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a7c930cc47b4f158c545b3f7dbcdb75c5">InitLoadDriver</a> (VOID)</td></tr>
<tr class="separator:a7c930cc47b4f158c545b3f7dbcdb75c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3affe9dfb55da29e7cb9e961db8d3f9a"><td class="memItemLeft" align="right" valign="top">NTSTATUS&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a3affe9dfb55da29e7cb9e961db8d3f9a">NtUserEnumDisplaySettings</a> (IN PUNICODE_STRING pstrDeviceName, IN <a class="el" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a> iModeNum, OUT LPDEVMODEW lpDevMode, <a class="el" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a> dwFalgs)</td></tr>
<tr class="separator:a3affe9dfb55da29e7cb9e961db8d3f9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
变量</h2></td></tr>
<tr class="memitem:a4f95d12ae9db57753d1ce7447479f0ee"><td class="memItemLeft" align="right" valign="top">BOOL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a4f95d12ae9db57753d1ce7447479f0ee">gbBaseVideo</a> = FALSE</td></tr>
<tr class="separator:a4f95d12ae9db57753d1ce7447479f0ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a762f2fbf9a0ad4d9a63f7c92adce1297"><td class="memItemLeft" align="right" valign="top">BOOL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a762f2fbf9a0ad4d9a63f7c92adce1297">bMultipleDisplaySystem</a> = FALSE</td></tr>
<tr class="separator:a762f2fbf9a0ad4d9a63f7c92adce1297"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2629889fd8bf33088b544b6c3128707a"><td class="memItemLeft" align="right" valign="top">static LPWSTR&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a2629889fd8bf33088b544b6c3128707a">DefaultSettings</a> [8]</td></tr>
<tr class="separator:a2629889fd8bf33088b544b6c3128707a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a998b6ce5633527f762d09b0f887e633f"><td class="memItemLeft" align="right" valign="top">static LPWSTR&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a998b6ce5633527f762d09b0f887e633f">AttachedSettings</a> []</td></tr>
<tr class="separator:a998b6ce5633527f762d09b0f887e633f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5de8fc19f0066ed30a41b9c0ef4d4deb"><td class="memItemLeft" align="right" valign="top">static LPWSTR&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00665.html#a5de8fc19f0066ed30a41b9c0ef4d4deb">SoftwareSettings</a> []</td></tr>
<tr class="separator:a5de8fc19f0066ed30a41b9c0ef4d4deb"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">宏定义说明</h2>
<a id="accf086041259110de4bd6aac57f64279"></a>
<h2 class="memtitle"><span class="permalink"><a href="#accf086041259110de4bd6aac57f64279">&#9670;&nbsp;</a></span>DEFAULT_POS_VALUE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DEFAULT_POS_VALUE&#160;&#160;&#160;0x80000000</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l00048">48</a> 行定义.</p>
</div>
</div>
<a id="a2ccdbdde9498b06c48c5eca065b9a1fd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2ccdbdde9498b06c48c5eca065b9a1fd">&#9670;&nbsp;</a></span>DISPLAY_DEVICE_VGA_COMPATIBLE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DISPLAY_DEVICE_VGA_COMPATIBLE&#160;&#160;&#160;0x00000010</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l00059">59</a> 行定义.</p>
</div>
</div>
<a id="a659e9e6483dce7cb60583d9b35f14de4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a659e9e6483dce7cb60583d9b35f14de4">&#9670;&nbsp;</a></span>DM_INTERNAL_VALID_FLAGS</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DM_INTERNAL_VALID_FLAGS</td>
</tr>
</table>
</div><div class="memdoc">
<b>值:</b><div class="fragment"><div class="line"> (DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY | \</div>
<div class="line"> DM_DISPLAYFLAGS | DM_LOGPIXELS | DM_PANNINGWIDTH | DM_PANNINGHEIGHT)</div>
</div><!-- fragment -->
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l00050">50</a> 行定义.</p>
</div>
</div>
<h2 class="groupheader">类型定义说明</h2>
<a id="a01e58bda8aaf9059fe3ffa0ddd55567b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a01e58bda8aaf9059fe3ffa0ddd55567b">&#9670;&nbsp;</a></span>DISP_DRIVER_REGISTRY_TYPE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef enum <a class="el" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01a">_DISP_DRIVER_REGISTRY_TYPE</a> <a class="el" href="a00665.html#a01e58bda8aaf9059fe3ffa0ddd55567b">DISP_DRIVER_REGISTRY_TYPE</a></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<h2 class="groupheader">枚举类型说明</h2>
<a id="a80592f8b0ad68fc0311741b0cbf6e01a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a80592f8b0ad68fc0311741b0cbf6e01a">&#9670;&nbsp;</a></span>_DISP_DRIVER_REGISTRY_TYPE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01a">_DISP_DRIVER_REGISTRY_TYPE</a></td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">枚举值</th></tr><tr><td class="fieldname"><a id="a80592f8b0ad68fc0311741b0cbf6e01aa58218890fafaa0643a59e9294a9843d0"></a>DispDriverRegGlobal&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a80592f8b0ad68fc0311741b0cbf6e01aa5ce32297dc3f6df4e82c6e0790d30063"></a>DispDriverRegHardwareProfile&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a80592f8b0ad68fc0311741b0cbf6e01aa01ae391162e54069de625bdc7049e934"></a>DispDriverRegHardwareProfileCreate&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l00030">30</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; {</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa58218890fafaa0643a59e9294a9843d0">DispDriverRegGlobal</a>,</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa5ce32297dc3f6df4e82c6e0790d30063">DispDriverRegHardwareProfile</a>,</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <a class="code" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa01ae391162e54069de625bdc7049e934">DispDriverRegHardwareProfileCreate</a></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;} <a class="code" href="a00665.html#a01e58bda8aaf9059fe3ffa0ddd55567b">DISP_DRIVER_REGISTRY_TYPE</a>;</div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">函数说明</h2>
<a id="a368e1b12420426ae8aaea867a5a40c98"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a368e1b12420426ae8aaea867a5a40c98">&#9670;&nbsp;</a></span>__EnumDisplayQueryRoutine()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">NTSTATUS __EnumDisplayQueryRoutine </td>
<td>(</td>
<td class="paramtype">IN PWSTR&#160;</td>
<td class="paramname"><em>ValueName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">IN ULONG&#160;</td>
<td class="paramname"><em>ValueType</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">IN PVOID&#160;</td>
<td class="paramname"><em>ValueData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">IN ULONG&#160;</td>
<td class="paramname"><em>ValueLength</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">IN PVOID&#160;</td>
<td class="paramname"><em>Context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">IN PVOID&#160;</td>
<td class="paramname"><em>EntryContext</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l00515">515</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;{</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160;<span class="comment"> * If the context value is NULL and the entry type is correct, then store</span></div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;<span class="comment"> * the length of the value. Otherwise, copy the value to the specified</span></div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;<span class="comment"> * memory.</span></div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; </div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordflow">if</span> ((Context == NULL) &amp;&amp;</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; ((ValueType == REG_SZ) || (ValueType == REG_MULTI_SZ)) ) {</div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; </div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; *(PULONG)EntryContext = ValueLength;</div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; </div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; </div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; RtlCopyMemory(Context, ValueData, ValueLength);</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; }</div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; </div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">return</span> STATUS_SUCCESS;</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l00554">UserGetDisplayDriverNames()</a>.</p>
</div>
</div>
<a id="a7c930cc47b4f158c545b3f7dbcdb75c5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7c930cc47b4f158c545b3f7dbcdb75c5">&#9670;&nbsp;</a></span>InitLoadDriver()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">NTSTATUS InitLoadDriver </td>
<td>(</td>
<td class="paramtype">VOID&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get Device Information</p>
<p>VGA Compatibility</p>
<p>Load Display Drivers</p>
<p>Accumulate devices - Set Primary</p>
<p>Handle loop exit conditions</p>
<p>Accumulate devices - build MDEV</p>
<p>Multi Driver Support</p>
<p>DDML Driver Support</p>
<p>Exit</p>
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l02945">2945</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>&#160;{</div>
<div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>&#160; <a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a> i, ii, iii, k;</div>
<div class="line"><a name="l02948"></a><span class="lineno"> 2948</span>&#160; NTSTATUS Status;</div>
<div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>&#160; PDEVMODEW pdevmodeInformation;</div>
<div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>&#160; DEVMODEW sourceDevmodeInformation;</div>
<div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>&#160; LPWSTR hardErrorString;</div>
<div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>&#160; UNICODE_STRING UnicodeString;</div>
<div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>&#160; UNICODE_STRING UnicodeDeviceName;</div>
<div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>&#160; HANDLE hkRegistry = NULL;</div>
<div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>&#160; BOOL bCheckForAttached;</div>
<div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>&#160; BOOL bAttachMirroring = FALSE;</div>
<div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>&#160; ULONG attached;</div>
<div class="line"><a name="l02958"></a><span class="lineno"> 2958</span>&#160; ULONG primary;</div>
<div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>&#160; ULONG mdevMultiDriver;</div>
<div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>&#160; ULONG mdevPrimary = (ULONG) -1;</div>
<div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>&#160; BOOL mdevPrimaryset = FALSE;</div>
<div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>&#160; BOOL displayInstalled = FALSE;</div>
<div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>&#160; BOOL vgaInstalled = FALSE;</div>
<div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>&#160; OBJECT_ATTRIBUTES ObjectAttributes;</div>
<div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>&#160; <a class="code" href="a02601.html">PPHYSICAL_DEV_INFO</a> pphysinfo;</div>
<div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>&#160; BOOL bKeepDevice;</div>
<div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>&#160; BOOL gbBaseVideoold;</div>
<div class="line"><a name="l02968"></a><span class="lineno"> 2968</span>&#160; </div>
<div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>&#160; <span class="comment">// TEMP</span></div>
<div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>&#160; <a class="code" href="a02605.html">DISPLAYINFO</a> localDispInfo[7] = {0};</div>
<div class="line"><a name="l02971"></a><span class="lineno"> 2971</span>&#160; MDEV mdev[7];</div>
<div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>&#160; </div>
<div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>&#160; </div>
<div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: Starting Display Driver Load Sequence\n&quot;</span>));</div>
<div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>&#160; </div>
<div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>&#160;<span class="comment"> * Lets determine if the user specified a primary output device in the</span></div>
<div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>&#160;<span class="comment"> * case where they may be multiple video cards.</span></div>
<div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDriver: Looking for a primary device\n&quot;</span>));</div>
<div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>&#160; </div>
<div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>&#160;<span class="comment"> * Basevideo is considered a primary device in that the user will run</span></div>
<div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>&#160;<span class="comment"> * the vga driver. This does override any other primary selection</span></div>
<div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>&#160;<span class="comment"> * the user may have put in the registry.</span></div>
<div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>&#160; RtlInitUnicodeString(&amp;UnicodeString,</div>
<div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>&#160; L<span class="stringliteral">&quot;\\Registry\\Machine\\System\\CurrentControlSet\\&quot;</span></div>
<div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>&#160; L<span class="stringliteral">&quot;Control\\GraphicsDrivers\\BaseVideo&quot;</span>);</div>
<div class="line"><a name="l02990"></a><span class="lineno"> 2990</span>&#160; </div>
<div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>&#160; InitializeObjectAttributes(&amp;ObjectAttributes,</div>
<div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>&#160; &amp;UnicodeString,</div>
<div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>&#160; OBJ_CASE_INSENSITIVE,</div>
<div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>&#160; NULL,</div>
<div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>&#160; NULL);</div>
<div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>&#160; </div>
<div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>&#160; Status = ZwOpenKey(&amp;hkRegistry,</div>
<div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>&#160; KEY_READ,</div>
<div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>&#160; &amp;ObjectAttributes);</div>
<div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>&#160; </div>
<div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>&#160; <span class="keywordflow">if</span> (NT_SUCCESS( Status)) {</div>
<div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>&#160; </div>
<div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDriver: Found Basevideo\n&quot;</span>));</div>
<div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>&#160; </div>
<div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>&#160; <a class="code" href="a00665.html#a4f95d12ae9db57753d1ce7447479f0ee">gbBaseVideo</a> = TRUE;</div>
<div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>&#160; ZwClose(hkRegistry);</div>
<div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>&#160; </div>
<div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>&#160; bCheckForAttached = FALSE;</div>
<div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>&#160; </div>
<div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>&#160; </div>
<div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>&#160; bCheckForAttached = TRUE;</div>
<div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>&#160; </div>
<div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>&#160; }</div>
<div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>&#160; </div>
<div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>&#160; hkRegistry = NULL;</div>
<div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>&#160; </div>
<div class="line"><a name="l03018"></a><span class="lineno"> 3018</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>&#160;<span class="comment"> * First time through the loop - try to find BASEVIDEO, if needed.</span></div>
<div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>&#160;<span class="comment"> * Second pass through the loop - find all the devices that are atached</span></div>
<div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>&#160;<span class="comment"> * to the desktop.</span></div>
<div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>&#160;<span class="comment"> * Third time through the loop - try to find any device that we can boot</span></div>
<div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>&#160;<span class="comment"> * with.</span></div>
<div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>&#160;<span class="comment"> * Fourth time through the loop - try to find any mirroring device.</span></div>
<div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>&#160; </div>
<div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>&#160; <span class="keywordflow">while</span> (1) {</div>
<div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>&#160; </div>
<div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>&#160; <span class="keywordflow">for</span> (i = 1; i &lt; <a class="code" href="a03257.html#a5f96c779e6c723388217ee64122dbec5">cphysDevInfo</a>; i++) {</div>
<div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>&#160; </div>
<div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>&#160;<span class="comment"> * NOTE:</span></div>
<div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>&#160;<span class="comment"> * Because we have many continue, break etc commands, lets close</span></div>
<div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>&#160;<span class="comment"> * our registry handle if we have one</span></div>
<div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>&#160; </div>
<div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>&#160; <span class="keywordflow">if</span> (hkRegistry) {</div>
<div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>&#160; ZwClose(hkRegistry);</div>
<div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>&#160; hkRegistry = NULL;</div>
<div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>&#160; }</div>
<div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>&#160; </div>
<div class="line"><a name="l03042"></a><span class="lineno"> 3042</span>&#160; bKeepDevice = FALSE;</div>
<div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>&#160; </div>
<div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>&#160; </div>
<div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;\nUserInit: LoadDriver: Trying to open device %ws \n&quot;</span>, <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].szNtDeviceName));</div>
<div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>&#160; </div>
<div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>&#160; RtlInitUnicodeString(&amp;UnicodeDeviceName, <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].szNtDeviceName);</div>
<div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>&#160; </div>
<div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>&#160; hkRegistry = <a class="code" href="a00665.html#ae157271d2738ad5440f4428d44232e65">UserGetRegistryHandleFromDeviceMap</a>(&amp;UnicodeDeviceName,</div>
<div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>&#160; <a class="code" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa58218890fafaa0643a59e9294a9843d0">DispDriverRegGlobal</a>,</div>
<div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>&#160; <a class="code" href="a00665.html#a4f95d12ae9db57753d1ce7447479f0ee">gbBaseVideo</a>,</div>
<div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>&#160; &amp;Status);</div>
<div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>&#160; </div>
<div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>&#160; <span class="keywordflow">if</span> (hkRegistry == NULL) {</div>
<div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>&#160; </div>
<div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>&#160;<span class="comment"> * Check the return code.</span></div>
<div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>&#160;<span class="comment"> * If we just have bad configuration data, go to the next device.</span></div>
<div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>&#160; <span class="keywordflow">if</span> (Status == STATUS_DEVICE_CONFIGURATION_ERROR) {</div>
<div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>&#160; </div>
<div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>&#160;<span class="comment"> * The registry is not configured properly for that device.</span></div>
<div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>&#160;<span class="comment"> * go on to the next one.</span></div>
<div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>&#160; <a class="code" href="a00665.html#aa8b64103d379d1cc9e91a96db783aa63">UserLogDisplayDriverEvent</a>(MsgInvalidConfiguration);</div>
<div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>&#160; </div>
<div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>&#160; </div>
<div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>&#160; }</div>
<div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>&#160; </div>
<div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>&#160;<span class="comment"> * continue on a NO_SUCH_DEVICE because we are looking for</span></div>
<div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>&#160;<span class="comment"> * a specific device, and we don&#39;t know it&#39;s number.</span></div>
<div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>&#160;<span class="comment"> * We get a different error when there are no more devices.</span></div>
<div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>&#160; </div>
<div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00665.html#a4f95d12ae9db57753d1ce7447479f0ee">gbBaseVideo</a>) {</div>
<div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>&#160; </div>
<div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>&#160; <span class="keywordflow">if</span> (Status == STATUS_NO_SUCH_DEVICE) {</div>
<div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>&#160; }</div>
<div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>&#160; }</div>
<div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>&#160; </div>
<div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>&#160;<span class="comment"> * We must be out of devices. Exit the loop</span></div>
<div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>&#160; }</div>
<div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>&#160; </div>
<div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>&#160;<span class="comment"> * Get the attached and primary data, which is per config (or also</span></div>
<div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>&#160;<span class="comment"> * global if necessary.</span></div>
<div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>&#160; </div>
<div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>&#160; attached = 0;</div>
<div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>&#160; primary = 0;</div>
<div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>&#160; localDispInfo[i].<a class="code" href="a02605.html#a263f5b35c44d9f9ae5c74acae8037644">rcScreen</a>.left = <a class="code" href="a00665.html#accf086041259110de4bd6aac57f64279">DEFAULT_POS_VALUE</a>;</div>
<div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>&#160; localDispInfo[i].<a class="code" href="a02605.html#a263f5b35c44d9f9ae5c74acae8037644">rcScreen</a>.top = <a class="code" href="a00665.html#accf086041259110de4bd6aac57f64279">DEFAULT_POS_VALUE</a>;</div>
<div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>&#160; </div>
<div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>&#160; <span class="keywordflow">if</span> (bCheckForAttached) {</div>
<div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>&#160; </div>
<div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>&#160; HANDLE hk2Registry = NULL;</div>
<div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>&#160; ULONG defaultValue = 0;</div>
<div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>&#160; ULONG defaultPosValue = <a class="code" href="a00665.html#accf086041259110de4bd6aac57f64279">DEFAULT_POS_VALUE</a>;</div>
<div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>&#160; </div>
<div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>&#160; RTL_QUERY_REGISTRY_TABLE AttachedQueryTable[] = {</div>
<div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>&#160; {NULL, RTL_QUERY_REGISTRY_DIRECT, <a class="code" href="a00665.html#a998b6ce5633527f762d09b0f887e633f">AttachedSettings</a>[0],</div>
<div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>&#160; &amp;primary, REG_DWORD, &amp;defaultValue, 4},</div>
<div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>&#160; {NULL, RTL_QUERY_REGISTRY_DIRECT, <a class="code" href="a00665.html#a998b6ce5633527f762d09b0f887e633f">AttachedSettings</a>[1],</div>
<div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>&#160; &amp;attached, REG_DWORD, &amp;defaultValue, 4},</div>
<div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>&#160; {NULL, RTL_QUERY_REGISTRY_DIRECT, <a class="code" href="a00665.html#a998b6ce5633527f762d09b0f887e633f">AttachedSettings</a>[2],</div>
<div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>&#160; &amp;localDispInfo[i].<a class="code" href="a02605.html#a263f5b35c44d9f9ae5c74acae8037644">rcScreen</a>.left, REG_DWORD, &amp;defaultPosValue, 4},</div>
<div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>&#160; {NULL, RTL_QUERY_REGISTRY_DIRECT, <a class="code" href="a00665.html#a998b6ce5633527f762d09b0f887e633f">AttachedSettings</a>[3],</div>
<div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>&#160; &amp;localDispInfo[i].<a class="code" href="a02605.html#a263f5b35c44d9f9ae5c74acae8037644">rcScreen</a>.top, REG_DWORD, &amp;defaultPosValue, 4},</div>
<div class="line"><a name="l03121"></a><span class="lineno"> 3121</span>&#160; {NULL, 0, NULL}</div>
<div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>&#160; };</div>
<div class="line"><a name="l03123"></a><span class="lineno"> 3123</span>&#160; </div>
<div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>&#160; hk2Registry = <a class="code" href="a00665.html#ae157271d2738ad5440f4428d44232e65">UserGetRegistryHandleFromDeviceMap</a>(&amp;UnicodeDeviceName,</div>
<div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>&#160; <a class="code" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa5ce32297dc3f6df4e82c6e0790d30063">DispDriverRegHardwareProfile</a>,</div>
<div class="line"><a name="l03126"></a><span class="lineno"> 3126</span>&#160; FALSE,</div>
<div class="line"><a name="l03127"></a><span class="lineno"> 3127</span>&#160; NULL);</div>
<div class="line"><a name="l03128"></a><span class="lineno"> 3128</span>&#160; <span class="keywordflow">if</span> (hk2Registry) {</div>
<div class="line"><a name="l03129"></a><span class="lineno"> 3129</span>&#160; </div>
<div class="line"><a name="l03130"></a><span class="lineno"> 3130</span>&#160; RtlQueryRegistryValues(RTL_REGISTRY_HANDLE,</div>
<div class="line"><a name="l03131"></a><span class="lineno"> 3131</span>&#160; (PWSTR)hk2Registry,</div>
<div class="line"><a name="l03132"></a><span class="lineno"> 3132</span>&#160; &amp;AttachedQueryTable[0],</div>
<div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>&#160; NULL,</div>
<div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>&#160; NULL);</div>
<div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>&#160; </div>
<div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>&#160; ZwClose(hk2Registry);</div>
<div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>&#160; </div>
<div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>&#160; </div>
<div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>&#160; RtlQueryRegistryValues(RTL_REGISTRY_HANDLE,</div>
<div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>&#160; (PWSTR)hkRegistry,</div>
<div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>&#160; &amp;AttachedQueryTable[0],</div>
<div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>&#160; NULL,</div>
<div class="line"><a name="l03144"></a><span class="lineno"> 3144</span>&#160; NULL);</div>
<div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>&#160; }</div>
<div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>&#160; </div>
<div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDriver: Display driver is %sprimary on the desktop\n&quot;</span>,</div>
<div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>&#160; primary ? <span class="stringliteral">&quot;&quot;</span> : <span class="stringliteral">&quot;NOT &quot;</span>));</div>
<div class="line"><a name="l03149"></a><span class="lineno"> 3149</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDriver: Display driver is %sattached to the desktop\n&quot;</span>,</div>
<div class="line"><a name="l03150"></a><span class="lineno"> 3150</span>&#160; attached ? <span class="stringliteral">&quot;&quot;</span> : <span class="stringliteral">&quot;NOT &quot;</span>));</div>
<div class="line"><a name="l03151"></a><span class="lineno"> 3151</span>&#160; </div>
<div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>&#160; <span class="keywordflow">if</span> (attached) {</div>
<div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDriver: Display driver is center positioned at %d, %d\n&quot;</span>,</div>
<div class="line"><a name="l03154"></a><span class="lineno"> 3154</span>&#160; localDispInfo[i].<a class="code" href="a00020.html#a263f5b35c44d9f9ae5c74acae8037644">rcScreen</a>.left,</div>
<div class="line"><a name="l03155"></a><span class="lineno"> 3155</span>&#160; localDispInfo[i].rcScreen.top));</div>
<div class="line"><a name="l03156"></a><span class="lineno"> 3156</span>&#160; }</div>
<div class="line"><a name="l03157"></a><span class="lineno"> 3157</span>&#160; }</div>
<div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>&#160; </div>
<div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>&#160;<span class="comment"> * Open the kernel driver if we need it for the display driver</span></div>
<div class="line"><a name="l03161"></a><span class="lineno"> 3161</span>&#160;<span class="comment"> * or for the VGA support.</span></div>
<div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>&#160;<span class="comment"> * Open it shared so we can still create other desktops on</span></div>
<div class="line"><a name="l03163"></a><span class="lineno"> 3163</span>&#160;<span class="comment"> * the device.</span></div>
<div class="line"><a name="l03164"></a><span class="lineno"> 3164</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03165"></a><span class="lineno"> 3165</span>&#160; </div>
<div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>&#160; RtlInitUnicodeString(&amp;UnicodeString, <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].szNtDeviceName);</div>
<div class="line"><a name="l03167"></a><span class="lineno"> 3167</span>&#160; </div>
<div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>&#160; pphysinfo = <a class="code" href="a00665.html#a291aca25f546e197608f39e4887001a9">UserGetDeviceFromName</a>(&amp;UnicodeString, USER_DEVICE_SHARED);</div>
<div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>&#160; </div>
<div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>&#160;<span class="comment"> * If there is an error opening the kernel driver, go to the next</span></div>
<div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>&#160;<span class="comment"> * driver.</span></div>
<div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03174"></a><span class="lineno"> 3174</span>&#160; <span class="keywordflow">if</span> (pphysinfo == NULL) {</div>
<div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#a41f433389f20db57f042022a662e96de">RIP_WARNING</a>, <span class="stringliteral">&quot;UserInit: LoadDriver: Error opening kernel video driver&quot;</span>);</div>
<div class="line"><a name="l03176"></a><span class="lineno"> 3176</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l03177"></a><span class="lineno"> 3177</span>&#160; }</div>
<div class="line"><a name="l03178"></a><span class="lineno"> 3178</span>&#160; </div>
<div class="line"><a name="l03179"></a><span class="lineno"> 3179</span>&#160; <span class="keywordflow">if</span> (pphysinfo != &amp;(<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i])) {</div>
<div class="line"><a name="l03180"></a><span class="lineno"> 3180</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#afa5f32de88404289ec03cd2c0e61e94f">RIP_ERROR</a>, <span class="stringliteral">&quot;UserInit: LoadDriver: Inconsistent pphysinfo\n&quot;</span>);</div>
<div class="line"><a name="l03181"></a><span class="lineno"> 3181</span>&#160; }</div>
<div class="line"><a name="l03182"></a><span class="lineno"> 3182</span>&#160; </div>
<div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>&#160; </div>
<div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>&#160; </div>
<div class="line"><a name="l03190"></a><span class="lineno"> 3190</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03191"></a><span class="lineno"> 3191</span>&#160;<span class="comment"> * If the vgaCompatible display is not installed, check this one.</span></div>
<div class="line"><a name="l03192"></a><span class="lineno"> 3192</span>&#160;<span class="comment"> * If it is the vgacompatible driver, set the installed flag to</span></div>
<div class="line"><a name="l03193"></a><span class="lineno"> 3193</span>&#160;<span class="comment"> * TRUE and save the info in the zeroth entry - reserved for VGA.</span></div>
<div class="line"><a name="l03194"></a><span class="lineno"> 3194</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03195"></a><span class="lineno"> 3195</span>&#160;<span class="preprocessor">#if defined (_X86_)</span></div>
<div class="line"><a name="l03196"></a><span class="lineno"> 3196</span>&#160; </div>
<div class="line"><a name="l03197"></a><span class="lineno"> 3197</span>&#160; <span class="keywordflow">if</span> ((vgaInstalled == FALSE) &amp;&amp;</div>
<div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>&#160; (<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].stateFlags &amp; <a class="code" href="a00665.html#a2ccdbdde9498b06c48c5eca065b9a1fd">DISPLAY_DEVICE_VGA_COMPATIBLE</a>)) {</div>
<div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l03200"></a><span class="lineno"> 3200</span>&#160; <span class="keywordflow">if</span> (0) {</div>
<div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l03202"></a><span class="lineno"> 3202</span>&#160; VIDEO_NUM_MODES NumModes;</div>
<div class="line"><a name="l03203"></a><span class="lineno"> 3203</span>&#160; ULONG NumModesLength = <span class="keyword">sizeof</span>(NumModes);</div>
<div class="line"><a name="l03204"></a><span class="lineno"> 3204</span>&#160; ULONG cbBuffer;</div>
<div class="line"><a name="l03205"></a><span class="lineno"> 3205</span>&#160; ULONG BytesReturned;</div>
<div class="line"><a name="l03206"></a><span class="lineno"> 3206</span>&#160; </div>
<div class="line"><a name="l03207"></a><span class="lineno"> 3207</span>&#160; PVIDEO_MODE_INFORMATION lpModes;</div>
<div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>&#160; PVIDEO_MODE_INFORMATION pVideoModeSave;</div>
<div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>&#160; </div>
<div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>&#160; ULONG cbdevmodeInfo = 0;</div>
<div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>&#160; LPDEVMODEW pDevmode;</div>
<div class="line"><a name="l03212"></a><span class="lineno"> 3212</span>&#160; LPDEVMODEW pDevmodeSave;</div>
<div class="line"><a name="l03213"></a><span class="lineno"> 3213</span>&#160; </div>
<div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03215"></a><span class="lineno"> 3215</span>&#160;<span class="comment"> * Build the list of text modes for this device</span></div>
<div class="line"><a name="l03216"></a><span class="lineno"> 3216</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDriver: get text modes\n&quot;</span>));</div>
<div class="line"><a name="l03218"></a><span class="lineno"> 3218</span>&#160; </div>
<div class="line"><a name="l03219"></a><span class="lineno"> 3219</span>&#160; Status = GreDeviceIoControl(<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].pDeviceHandle,</div>
<div class="line"><a name="l03220"></a><span class="lineno"> 3220</span>&#160; IOCTL_VIDEO_QUERY_NUM_AVAIL_MODES,</div>
<div class="line"><a name="l03221"></a><span class="lineno"> 3221</span>&#160; NULL,</div>
<div class="line"><a name="l03222"></a><span class="lineno"> 3222</span>&#160; 0,</div>
<div class="line"><a name="l03223"></a><span class="lineno"> 3223</span>&#160; &amp;NumModes,</div>
<div class="line"><a name="l03224"></a><span class="lineno"> 3224</span>&#160; NumModesLength,</div>
<div class="line"><a name="l03225"></a><span class="lineno"> 3225</span>&#160; &amp;BytesReturned);</div>
<div class="line"><a name="l03226"></a><span class="lineno"> 3226</span>&#160; </div>
<div class="line"><a name="l03227"></a><span class="lineno"> 3227</span>&#160; cbBuffer = NumModes.NumModes * NumModes.ModeInformationLength;</div>
<div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>&#160; </div>
<div class="line"><a name="l03229"></a><span class="lineno"> 3229</span>&#160; <span class="keywordflow">if</span> ( (NT_SUCCESS(Status)) &amp;&amp;</div>
<div class="line"><a name="l03230"></a><span class="lineno"> 3230</span>&#160; (lpModes = (PVIDEO_MODE_INFORMATION)</div>
<div class="line"><a name="l03231"></a><span class="lineno"> 3231</span>&#160; UserAllocPool(cbBuffer, TAG_SYSTEM)) )</div>
<div class="line"><a name="l03232"></a><span class="lineno"> 3232</span>&#160; {</div>
<div class="line"><a name="l03233"></a><span class="lineno"> 3233</span>&#160; Status = GreDeviceIoControl(<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].pDeviceHandle,</div>
<div class="line"><a name="l03234"></a><span class="lineno"> 3234</span>&#160; IOCTL_VIDEO_QUERY_AVAIL_MODES,</div>
<div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>&#160; NULL,</div>
<div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>&#160; 0,</div>
<div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>&#160; lpModes,</div>
<div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>&#160; cbBuffer,</div>
<div class="line"><a name="l03239"></a><span class="lineno"> 3239</span>&#160; &amp;BytesReturned);</div>
<div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>&#160; </div>
<div class="line"><a name="l03241"></a><span class="lineno"> 3241</span>&#160; pVideoModeSave = lpModes;</div>
<div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>&#160; </div>
<div class="line"><a name="l03243"></a><span class="lineno"> 3243</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>&#160;<span class="comment"> * We will not support mode than three text modes.</span></div>
<div class="line"><a name="l03245"></a><span class="lineno"> 3245</span>&#160;<span class="comment"> * So just allocate enough for that.</span></div>
<div class="line"><a name="l03246"></a><span class="lineno"> 3246</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03247"></a><span class="lineno"> 3247</span>&#160; <span class="keywordflow">if</span> ((NT_SUCCESS(Status)) &amp;&amp;</div>
<div class="line"><a name="l03248"></a><span class="lineno"> 3248</span>&#160; (pDevmode = (LPDEVMODEW)</div>
<div class="line"><a name="l03249"></a><span class="lineno"> 3249</span>&#160; UserAllocPool(3 * <span class="keyword">sizeof</span>(DEVMODEW), TAG_SYSTEM))) {</div>
<div class="line"><a name="l03250"></a><span class="lineno"> 3250</span>&#160; </div>
<div class="line"><a name="l03251"></a><span class="lineno"> 3251</span>&#160; pDevmodeSave = pDevmode;</div>
<div class="line"><a name="l03252"></a><span class="lineno"> 3252</span>&#160; </div>
<div class="line"><a name="l03253"></a><span class="lineno"> 3253</span>&#160; memset(pDevmode, 0, 3 * <span class="keyword">sizeof</span>(DEVMODEW));</div>
<div class="line"><a name="l03254"></a><span class="lineno"> 3254</span>&#160; </div>
<div class="line"><a name="l03255"></a><span class="lineno"> 3255</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDriver: parsing text modes\n&quot;</span>));</div>
<div class="line"><a name="l03256"></a><span class="lineno"> 3256</span>&#160; </div>
<div class="line"><a name="l03257"></a><span class="lineno"> 3257</span>&#160; <span class="keywordflow">while</span> (cbBuffer != 0) {</div>
<div class="line"><a name="l03258"></a><span class="lineno"> 3258</span>&#160; </div>
<div class="line"><a name="l03259"></a><span class="lineno"> 3259</span>&#160; <span class="keywordflow">if</span> ((lpModes-&gt;AttributeFlags &amp; VIDEO_MODE_COLOR) &amp;&amp;</div>
<div class="line"><a name="l03260"></a><span class="lineno"> 3260</span>&#160; (!(lpModes-&gt;AttributeFlags &amp; VIDEO_MODE_GRAPHICS)))</div>
<div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>&#160; {</div>
<div class="line"><a name="l03262"></a><span class="lineno"> 3262</span>&#160; </div>
<div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03264"></a><span class="lineno"> 3264</span>&#160;<span class="comment"> * Make sure we have no more than 3 text modes</span></div>
<div class="line"><a name="l03265"></a><span class="lineno"> 3265</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03266"></a><span class="lineno"> 3266</span>&#160; <span class="keywordflow">if</span> (cbdevmodeInfo == 3 * <span class="keyword">sizeof</span>(DEVMODEW)) {</div>
<div class="line"><a name="l03267"></a><span class="lineno"> 3267</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#afa5f32de88404289ec03cd2c0e61e94f">RIP_ERROR</a>, <span class="stringliteral">&quot;UserInit: VGA compatible device has too many text modes\n&quot;</span>);</div>
<div class="line"><a name="l03268"></a><span class="lineno"> 3268</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l03269"></a><span class="lineno"> 3269</span>&#160; }</div>
<div class="line"><a name="l03270"></a><span class="lineno"> 3270</span>&#160; </div>
<div class="line"><a name="l03271"></a><span class="lineno"> 3271</span>&#160; RtlZeroMemory(pDevmode, <span class="keyword">sizeof</span>(DEVMODEW));</div>
<div class="line"><a name="l03272"></a><span class="lineno"> 3272</span>&#160; </div>
<div class="line"><a name="l03273"></a><span class="lineno"> 3273</span>&#160; memcpy(pDevmode-&gt;dmDeviceName,</div>
<div class="line"><a name="l03274"></a><span class="lineno"> 3274</span>&#160; L<span class="stringliteral">&quot;FULLSCREEN CONSOLE&quot;</span>,</div>
<div class="line"><a name="l03275"></a><span class="lineno"> 3275</span>&#160; <span class="keyword">sizeof</span>(L<span class="stringliteral">&quot;FULLSCREEN CONSOLE&quot;</span>));</div>
<div class="line"><a name="l03276"></a><span class="lineno"> 3276</span>&#160; </div>
<div class="line"><a name="l03277"></a><span class="lineno"> 3277</span>&#160; pDevmode-&gt;dmSize = <span class="keyword">sizeof</span>(DEVMODEW);</div>
<div class="line"><a name="l03278"></a><span class="lineno"> 3278</span>&#160; pDevmode-&gt;dmSpecVersion = DM_SPECVERSION;</div>
<div class="line"><a name="l03279"></a><span class="lineno"> 3279</span>&#160; pDevmode-&gt;dmDriverVersion = DM_SPECVERSION;</div>
<div class="line"><a name="l03280"></a><span class="lineno"> 3280</span>&#160; pDevmode-&gt;dmDisplayFlags = DMDISPLAYFLAGS_TEXTMODE;</div>
<div class="line"><a name="l03281"></a><span class="lineno"> 3281</span>&#160; </div>
<div class="line"><a name="l03282"></a><span class="lineno"> 3282</span>&#160; pDevmode-&gt;dmPelsWidth =</div>
<div class="line"><a name="l03283"></a><span class="lineno"> 3283</span>&#160; lpModes-&gt;VisScreenWidth;</div>
<div class="line"><a name="l03284"></a><span class="lineno"> 3284</span>&#160; pDevmode-&gt;dmPelsHeight =</div>
<div class="line"><a name="l03285"></a><span class="lineno"> 3285</span>&#160; lpModes-&gt;VisScreenHeight;</div>
<div class="line"><a name="l03286"></a><span class="lineno"> 3286</span>&#160; pDevmode-&gt;dmBitsPerPel =</div>
<div class="line"><a name="l03287"></a><span class="lineno"> 3287</span>&#160; lpModes-&gt;NumberOfPlanes *</div>
<div class="line"><a name="l03288"></a><span class="lineno"> 3288</span>&#160; lpModes-&gt;BitsPerPlane;</div>
<div class="line"><a name="l03289"></a><span class="lineno"> 3289</span>&#160; </div>
<div class="line"><a name="l03290"></a><span class="lineno"> 3290</span>&#160; pDevmode-&gt;dmFields = DM_BITSPERPEL |</div>
<div class="line"><a name="l03291"></a><span class="lineno"> 3291</span>&#160; DM_PELSWIDTH |</div>
<div class="line"><a name="l03292"></a><span class="lineno"> 3292</span>&#160; DM_PELSHEIGHT |</div>
<div class="line"><a name="l03293"></a><span class="lineno"> 3293</span>&#160; DM_DISPLAYFLAGS ;</div>
<div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>&#160; </div>
<div class="line"><a name="l03295"></a><span class="lineno"> 3295</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03296"></a><span class="lineno"> 3296</span>&#160;<span class="comment"> * NOTE !!!</span></div>
<div class="line"><a name="l03297"></a><span class="lineno"> 3297</span>&#160;<span class="comment"> * As a hack, lets store the mode number in</span></div>
<div class="line"><a name="l03298"></a><span class="lineno"> 3298</span>&#160;<span class="comment"> * a field we don&#39;t use</span></div>
<div class="line"><a name="l03299"></a><span class="lineno"> 3299</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03300"></a><span class="lineno"> 3300</span>&#160; pDevmode-&gt;dmOrientation =</div>
<div class="line"><a name="l03301"></a><span class="lineno"> 3301</span>&#160; (USHORT) lpModes-&gt;ModeIndex;</div>
<div class="line"><a name="l03302"></a><span class="lineno"> 3302</span>&#160; </div>
<div class="line"><a name="l03303"></a><span class="lineno"> 3303</span>&#160; cbdevmodeInfo += <span class="keyword">sizeof</span>(DEVMODEW);</div>
<div class="line"><a name="l03304"></a><span class="lineno"> 3304</span>&#160; pDevmode += 1;</div>
<div class="line"><a name="l03305"></a><span class="lineno"> 3305</span>&#160; </div>
<div class="line"><a name="l03306"></a><span class="lineno"> 3306</span>&#160; }</div>
<div class="line"><a name="l03307"></a><span class="lineno"> 3307</span>&#160; </div>
<div class="line"><a name="l03308"></a><span class="lineno"> 3308</span>&#160; cbBuffer -= NumModes.ModeInformationLength;</div>
<div class="line"><a name="l03309"></a><span class="lineno"> 3309</span>&#160; </div>
<div class="line"><a name="l03310"></a><span class="lineno"> 3310</span>&#160; lpModes = (PVIDEO_MODE_INFORMATION)</div>
<div class="line"><a name="l03311"></a><span class="lineno"> 3311</span>&#160; (((PUCHAR)lpModes) + NumModes.ModeInformationLength);</div>
<div class="line"><a name="l03312"></a><span class="lineno"> 3312</span>&#160; }</div>
<div class="line"><a name="l03313"></a><span class="lineno"> 3313</span>&#160; }</div>
<div class="line"><a name="l03314"></a><span class="lineno"> 3314</span>&#160; </div>
<div class="line"><a name="l03315"></a><span class="lineno"> 3315</span>&#160; UserFreePool(pVideoModeSave);</div>
<div class="line"><a name="l03316"></a><span class="lineno"> 3316</span>&#160; }</div>
<div class="line"><a name="l03317"></a><span class="lineno"> 3317</span>&#160; </div>
<div class="line"><a name="l03318"></a><span class="lineno"> 3318</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03319"></a><span class="lineno"> 3319</span>&#160;<span class="comment"> * if everything went OK with that, then we can save this</span></div>
<div class="line"><a name="l03320"></a><span class="lineno"> 3320</span>&#160;<span class="comment"> * device as vga compatible !</span></div>
<div class="line"><a name="l03321"></a><span class="lineno"> 3321</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l03322"></a><span class="lineno"> 3322</span>&#160;<span class="comment"> * If no modes are available, do not setup this device.</span></div>
<div class="line"><a name="l03323"></a><span class="lineno"> 3323</span>&#160;<span class="comment"> * Otherwise, EnumDisplaySettings will end up trying to get</span></div>
<div class="line"><a name="l03324"></a><span class="lineno"> 3324</span>&#160;<span class="comment"> * the list of modes for this device, which it can not do.</span></div>
<div class="line"><a name="l03325"></a><span class="lineno"> 3325</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>&#160; </div>
<div class="line"><a name="l03327"></a><span class="lineno"> 3327</span>&#160; <span class="keywordflow">if</span> (cbdevmodeInfo) {</div>
<div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>&#160; </div>
<div class="line"><a name="l03329"></a><span class="lineno"> 3329</span>&#160; vgaInstalled = TRUE;</div>
<div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>&#160; </div>
<div class="line"><a name="l03331"></a><span class="lineno"> 3331</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDriver: saving VGA compatible device\n&quot;</span>));</div>
<div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>&#160; </div>
<div class="line"><a name="l03333"></a><span class="lineno"> 3333</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03334"></a><span class="lineno"> 3334</span>&#160;<span class="comment"> * Copy the string and the handle ...</span></div>
<div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03336"></a><span class="lineno"> 3336</span>&#160; RtlCopyMemory(<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[0].szNtDeviceName,</div>
<div class="line"><a name="l03337"></a><span class="lineno"> 3337</span>&#160; <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].szNtDeviceName,</div>
<div class="line"><a name="l03338"></a><span class="lineno"> 3338</span>&#160; <span class="keyword">sizeof</span>(<a class="code" href="a02601.html">PHYSICAL_DEV_INFO</a>));</div>
<div class="line"><a name="l03339"></a><span class="lineno"> 3339</span>&#160; </div>
<div class="line"><a name="l03340"></a><span class="lineno"> 3340</span>&#160; <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[0].<a class="code" href="a02601.html#a11272e040ff3989da159f50e88b7b8c6">cbdevmodeInfo</a> = cbdevmodeInfo;</div>
<div class="line"><a name="l03341"></a><span class="lineno"> 3341</span>&#160; <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[0].<a class="code" href="a02601.html#a1fe37d9234f46b11eab06dbfbafab7e9">devmodeInfo</a> = pDevmodeSave;</div>
<div class="line"><a name="l03342"></a><span class="lineno"> 3342</span>&#160; </div>
<div class="line"><a name="l03343"></a><span class="lineno"> 3343</span>&#160; RtlWriteRegistryValue(RTL_REGISTRY_DEVICEMAP,</div>
<div class="line"><a name="l03344"></a><span class="lineno"> 3344</span>&#160; L<span class="stringliteral">&quot;Video&quot;</span>,</div>
<div class="line"><a name="l03345"></a><span class="lineno"> 3345</span>&#160; L<span class="stringliteral">&quot;VgaCompatible&quot;</span>,</div>
<div class="line"><a name="l03346"></a><span class="lineno"> 3346</span>&#160; REG_SZ,</div>
<div class="line"><a name="l03347"></a><span class="lineno"> 3347</span>&#160; UnicodeDeviceName.Buffer,</div>
<div class="line"><a name="l03348"></a><span class="lineno"> 3348</span>&#160; UnicodeDeviceName.Length +</div>
<div class="line"><a name="l03349"></a><span class="lineno"> 3349</span>&#160; <span class="keyword">sizeof</span>(UNICODE_NULL));</div>
<div class="line"><a name="l03350"></a><span class="lineno"> 3350</span>&#160; </div>
<div class="line"><a name="l03351"></a><span class="lineno"> 3351</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03352"></a><span class="lineno"> 3352</span>&#160;<span class="comment"> * Mark this device as being used</span></div>
<div class="line"><a name="l03353"></a><span class="lineno"> 3353</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03354"></a><span class="lineno"> 3354</span>&#160; bKeepDevice = TRUE;</div>
<div class="line"><a name="l03355"></a><span class="lineno"> 3355</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l03356"></a><span class="lineno"> 3356</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#afa5f32de88404289ec03cd2c0e61e94f">RIP_ERROR</a>, <span class="stringliteral">&quot;UserInit: VGA compatible device has NO text modes!\n&quot;</span>);</div>
<div class="line"><a name="l03357"></a><span class="lineno"> 3357</span>&#160; }</div>
<div class="line"><a name="l03358"></a><span class="lineno"> 3358</span>&#160; }</div>
<div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>&#160; </div>
<div class="line"><a name="l03360"></a><span class="lineno"> 3360</span>&#160; </div>
<div class="line"><a name="l03361"></a><span class="lineno"> 3361</span>&#160; </div>
<div class="line"><a name="l03367"></a><span class="lineno"> 3367</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03368"></a><span class="lineno"> 3368</span>&#160;<span class="comment"> * Try to open the display driver associated to the kernel driver.</span></div>
<div class="line"><a name="l03369"></a><span class="lineno"> 3369</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l03370"></a><span class="lineno"> 3370</span>&#160;<span class="comment"> * We want to do this if we are looking for an attached device (taking</span></div>
<div class="line"><a name="l03371"></a><span class="lineno"> 3371</span>&#160;<span class="comment"> * into account mirror devices properly) or if we are just looking</span></div>
<div class="line"><a name="l03372"></a><span class="lineno"> 3372</span>&#160;<span class="comment"> * for any device.</span></div>
<div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>&#160; </div>
<div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>&#160; <span class="keywordflow">if</span> ( (bCheckForAttached &amp;&amp;</div>
<div class="line"><a name="l03376"></a><span class="lineno"> 3376</span>&#160; attached &amp;&amp;</div>
<div class="line"><a name="l03377"></a><span class="lineno"> 3377</span>&#160; ( (bAttachMirroring &amp;&amp;</div>
<div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>&#160; (<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].stateFlags &amp;</div>
<div class="line"><a name="l03379"></a><span class="lineno"> 3379</span>&#160; DISPLAY_DEVICE_MIRRORING_DRIVER))</div>
<div class="line"><a name="l03380"></a><span class="lineno"> 3380</span>&#160; </div>
<div class="line"><a name="l03381"></a><span class="lineno"> 3381</span>&#160; ||</div>
<div class="line"><a name="l03382"></a><span class="lineno"> 3382</span>&#160; </div>
<div class="line"><a name="l03383"></a><span class="lineno"> 3383</span>&#160; (!bAttachMirroring &amp;&amp;</div>
<div class="line"><a name="l03384"></a><span class="lineno"> 3384</span>&#160; !(<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].stateFlags &amp;</div>
<div class="line"><a name="l03385"></a><span class="lineno"> 3385</span>&#160; DISPLAY_DEVICE_MIRRORING_DRIVER))</div>
<div class="line"><a name="l03386"></a><span class="lineno"> 3386</span>&#160; )</div>
<div class="line"><a name="l03387"></a><span class="lineno"> 3387</span>&#160; )</div>
<div class="line"><a name="l03388"></a><span class="lineno"> 3388</span>&#160; </div>
<div class="line"><a name="l03389"></a><span class="lineno"> 3389</span>&#160; ||</div>
<div class="line"><a name="l03390"></a><span class="lineno"> 3390</span>&#160; </div>
<div class="line"><a name="l03391"></a><span class="lineno"> 3391</span>&#160; (!bCheckForAttached &amp;&amp; !displayInstalled)) {</div>
<div class="line"><a name="l03392"></a><span class="lineno"> 3392</span>&#160; </div>
<div class="line"><a name="l03393"></a><span class="lineno"> 3393</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03394"></a><span class="lineno"> 3394</span>&#160;<span class="comment"> * We will try to load the driver using the information in the</span></div>
<div class="line"><a name="l03395"></a><span class="lineno"> 3395</span>&#160;<span class="comment"> * registry. If it matches perfectly with a mode from the driver -</span></div>
<div class="line"><a name="l03396"></a><span class="lineno"> 3396</span>&#160;<span class="comment"> * great. If it&#39;s a loose match, the we just give a warning.</span></div>
<div class="line"><a name="l03397"></a><span class="lineno"> 3397</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l03398"></a><span class="lineno"> 3398</span>&#160;<span class="comment"> * If that does nto work, we will want to try the first mode</span></div>
<div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>&#160;<span class="comment"> * in the list - which we get by matching with 0,0,0</span></div>
<div class="line"><a name="l03400"></a><span class="lineno"> 3400</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l03401"></a><span class="lineno"> 3401</span>&#160;<span class="comment"> * If that also fails, we want to boot with the default DEVMODE</span></div>
<div class="line"><a name="l03402"></a><span class="lineno"> 3402</span>&#160;<span class="comment"> * that we pass to the driver.</span></div>
<div class="line"><a name="l03403"></a><span class="lineno"> 3403</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03404"></a><span class="lineno"> 3404</span>&#160; </div>
<div class="line"><a name="l03405"></a><span class="lineno"> 3405</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].stateFlags &amp; DISPLAY_DEVICE_MIRRORING_DRIVER) {</div>
<div class="line"><a name="l03406"></a><span class="lineno"> 3406</span>&#160; </div>
<div class="line"><a name="l03407"></a><span class="lineno"> 3407</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03408"></a><span class="lineno"> 3408</span>&#160;<span class="comment"> * In the case of mirroring, we want to use the same</span></div>
<div class="line"><a name="l03409"></a><span class="lineno"> 3409</span>&#160;<span class="comment"> * DEVMODE as was provided for the main display. We also</span></div>
<div class="line"><a name="l03410"></a><span class="lineno"> 3410</span>&#160;<span class="comment"> * want to make sure we do it after the proper displays</span></div>
<div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>&#160;<span class="comment"> * have been loaded.</span></div>
<div class="line"><a name="l03412"></a><span class="lineno"> 3412</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03413"></a><span class="lineno"> 3413</span>&#160; </div>
<div class="line"><a name="l03414"></a><span class="lineno"> 3414</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03415"></a><span class="lineno"> 3415</span>&#160;<span class="comment"> * If we have no primary at this point, we are in trouble !</span></div>
<div class="line"><a name="l03416"></a><span class="lineno"> 3416</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03417"></a><span class="lineno"> 3417</span>&#160; <span class="keywordflow">if</span> (mdevPrimary == (ULONG) -1) {</div>
<div class="line"><a name="l03418"></a><span class="lineno"> 3418</span>&#160; <a class="code" href="a00371.html#a162a73e20dfabca084a3ebb4581631a8">UserAssert</a>(mdevPrimary != (ULONG) -1);</div>
<div class="line"><a name="l03419"></a><span class="lineno"> 3419</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l03420"></a><span class="lineno"> 3420</span>&#160; }</div>
<div class="line"><a name="l03421"></a><span class="lineno"> 3421</span>&#160; </div>
<div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>&#160; pdevmodeInformation = &amp;sourceDevmodeInformation;</div>
<div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>&#160; </div>
<div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>&#160; RtlCopyMemory(&amp;sourceDevmodeInformation,</div>
<div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>&#160; <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[mdevPrimary].pCurrentDevmode,</div>
<div class="line"><a name="l03426"></a><span class="lineno"> 3426</span>&#160; <span class="keyword">sizeof</span>(DEVMODEW));</div>
<div class="line"><a name="l03427"></a><span class="lineno"> 3427</span>&#160; </div>
<div class="line"><a name="l03428"></a><span class="lineno"> 3428</span>&#160; Status = STATUS_SUCCESS;</div>
<div class="line"><a name="l03429"></a><span class="lineno"> 3429</span>&#160; </div>
<div class="line"><a name="l03430"></a><span class="lineno"> 3430</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l03431"></a><span class="lineno"> 3431</span>&#160; </div>
<div class="line"><a name="l03432"></a><span class="lineno"> 3432</span>&#160; RtlZeroMemory(&amp;sourceDevmodeInformation, <span class="keyword">sizeof</span>(DEVMODEW));</div>
<div class="line"><a name="l03433"></a><span class="lineno"> 3433</span>&#160; sourceDevmodeInformation.dmSize = <span class="keyword">sizeof</span>(DEVMODEW);</div>
<div class="line"><a name="l03434"></a><span class="lineno"> 3434</span>&#160; </div>
<div class="line"><a name="l03435"></a><span class="lineno"> 3435</span>&#160; Status = <a class="code" href="a00665.html#a7f72492be72deb72088a46321f3703e9">ProbeAndCaptureDevmode</a>(&amp;UnicodeDeviceName,</div>
<div class="line"><a name="l03436"></a><span class="lineno"> 3436</span>&#160; &amp;pdevmodeInformation,</div>
<div class="line"><a name="l03437"></a><span class="lineno"> 3437</span>&#160; &amp;sourceDevmodeInformation,</div>
<div class="line"><a name="l03438"></a><span class="lineno"> 3438</span>&#160; TRUE);</div>
<div class="line"><a name="l03439"></a><span class="lineno"> 3439</span>&#160; }</div>
<div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>&#160; </div>
<div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>&#160; <span class="keywordflow">if</span> (NT_SUCCESS(Status)) {</div>
<div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>&#160; </div>
<div class="line"><a name="l03443"></a><span class="lineno"> 3443</span>&#160; <span class="keywordflow">if</span> (Status == STATUS_RECEIVE_PARTIAL) {</div>
<div class="line"><a name="l03444"></a><span class="lineno"> 3444</span>&#160; </div>
<div class="line"><a name="l03445"></a><span class="lineno"> 3445</span>&#160; <a class="code" href="a00665.html#aa8b64103d379d1cc9e91a96db783aa63">UserLogDisplayDriverEvent</a>(MsgInvalidDisplayMode);</div>
<div class="line"><a name="l03446"></a><span class="lineno"> 3446</span>&#160; }</div>
<div class="line"><a name="l03447"></a><span class="lineno"> 3447</span>&#160; </div>
<div class="line"><a name="l03448"></a><span class="lineno"> 3448</span>&#160; localDispInfo[i].<a class="code" href="a02605.html#a81f6c7e5df9c00e3f33e6e1a94ac75fc">hDev</a> = <a class="code" href="a00665.html#a64f37a06db6b3bcaf0b9bb15887675e6">UserLoadDisplayDriver</a>(&amp;<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i],</div>
<div class="line"><a name="l03449"></a><span class="lineno"> 3449</span>&#160; &amp;UnicodeDeviceName,</div>
<div class="line"><a name="l03450"></a><span class="lineno"> 3450</span>&#160; &amp;<a class="code" href="a03257.html#a9744bfca19a1b2f747cb8816a7685cd8">strDisplayDriver</a>,</div>
<div class="line"><a name="l03451"></a><span class="lineno"> 3451</span>&#160; pdevmodeInformation,</div>
<div class="line"><a name="l03452"></a><span class="lineno"> 3452</span>&#160; <span class="comment">// BUGBUG TRUE or FALSE for multi ?</span></div>
<div class="line"><a name="l03453"></a><span class="lineno"> 3453</span>&#160; TRUE,</div>
<div class="line"><a name="l03454"></a><span class="lineno"> 3454</span>&#160; TRUE,</div>
<div class="line"><a name="l03455"></a><span class="lineno"> 3455</span>&#160; (PDEVICE_LOCK *)&amp;localDispInfo[i].pDevLock);</div>
<div class="line"><a name="l03456"></a><span class="lineno"> 3456</span>&#160; }</div>
<div class="line"><a name="l03457"></a><span class="lineno"> 3457</span>&#160; </div>
<div class="line"><a name="l03458"></a><span class="lineno"> 3458</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03459"></a><span class="lineno"> 3459</span>&#160;<span class="comment"> * We failed to load a display driver with this devmode.</span></div>
<div class="line"><a name="l03460"></a><span class="lineno"> 3460</span>&#160;<span class="comment"> * Try to pick the first valid Devmode.</span></div>
<div class="line"><a name="l03461"></a><span class="lineno"> 3461</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l03462"></a><span class="lineno"> 3462</span>&#160;<span class="comment"> * The trick to do this is to turn on BaseVideo temporarily.</span></div>
<div class="line"><a name="l03463"></a><span class="lineno"> 3463</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03464"></a><span class="lineno"> 3464</span>&#160; </div>
<div class="line"><a name="l03465"></a><span class="lineno"> 3465</span>&#160; <span class="keywordflow">if</span> (!localDispInfo[i].hDev) {</div>
<div class="line"><a name="l03466"></a><span class="lineno"> 3466</span>&#160; </div>
<div class="line"><a name="l03467"></a><span class="lineno"> 3467</span>&#160; <a class="code" href="a00665.html#aa8b64103d379d1cc9e91a96db783aa63">UserLogDisplayDriverEvent</a>(MsgInvalidDisplayMode);</div>
<div class="line"><a name="l03468"></a><span class="lineno"> 3468</span>&#160; </div>
<div class="line"><a name="l03469"></a><span class="lineno"> 3469</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03470"></a><span class="lineno"> 3470</span>&#160;<span class="comment"> * Free memory allocated by ProbeAndCaptureDevmode</span></div>
<div class="line"><a name="l03471"></a><span class="lineno"> 3471</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03472"></a><span class="lineno"> 3472</span>&#160; </div>
<div class="line"><a name="l03473"></a><span class="lineno"> 3473</span>&#160; <span class="keywordflow">if</span> (pdevmodeInformation) {</div>
<div class="line"><a name="l03474"></a><span class="lineno"> 3474</span>&#160; </div>
<div class="line"><a name="l03475"></a><span class="lineno"> 3475</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03476"></a><span class="lineno"> 3476</span>&#160;<span class="comment"> * Log an error saying the selected color or</span></div>
<div class="line"><a name="l03477"></a><span class="lineno"> 3477</span>&#160;<span class="comment"> * resolution is invalid.</span></div>
<div class="line"><a name="l03478"></a><span class="lineno"> 3478</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03479"></a><span class="lineno"> 3479</span>&#160; <span class="keywordflow">if</span> (pdevmodeInformation-&gt;dmBitsPerPel == 0x4) {</div>
<div class="line"><a name="l03480"></a><span class="lineno"> 3480</span>&#160; </div>
<div class="line"><a name="l03481"></a><span class="lineno"> 3481</span>&#160; <a class="code" href="a00665.html#aa8b64103d379d1cc9e91a96db783aa63">UserLogDisplayDriverEvent</a>(MsgInvalidDisplay16Colors);</div>
<div class="line"><a name="l03482"></a><span class="lineno"> 3482</span>&#160; }</div>
<div class="line"><a name="l03483"></a><span class="lineno"> 3483</span>&#160; </div>
<div class="line"><a name="l03484"></a><span class="lineno"> 3484</span>&#160; </div>
<div class="line"><a name="l03485"></a><span class="lineno"> 3485</span>&#160; <span class="keywordflow">if</span> (pdevmodeInformation != &amp;sourceDevmodeInformation) {</div>
<div class="line"><a name="l03486"></a><span class="lineno"> 3486</span>&#160; </div>
<div class="line"><a name="l03487"></a><span class="lineno"> 3487</span>&#160; UserFreePool(pdevmodeInformation);</div>
<div class="line"><a name="l03488"></a><span class="lineno"> 3488</span>&#160; pdevmodeInformation = NULL;</div>
<div class="line"><a name="l03489"></a><span class="lineno"> 3489</span>&#160; }</div>
<div class="line"><a name="l03490"></a><span class="lineno"> 3490</span>&#160; }</div>
<div class="line"><a name="l03491"></a><span class="lineno"> 3491</span>&#160; </div>
<div class="line"><a name="l03492"></a><span class="lineno"> 3492</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDriver: Trying first DEVMODE\n&quot;</span>));</div>
<div class="line"><a name="l03493"></a><span class="lineno"> 3493</span>&#160; </div>
<div class="line"><a name="l03494"></a><span class="lineno"> 3494</span>&#160; RtlZeroMemory(&amp;sourceDevmodeInformation, <span class="keyword">sizeof</span>(DEVMODEW));</div>
<div class="line"><a name="l03495"></a><span class="lineno"> 3495</span>&#160; sourceDevmodeInformation.dmSize = <span class="keyword">sizeof</span>(DEVMODEW);</div>
<div class="line"><a name="l03496"></a><span class="lineno"> 3496</span>&#160; </div>
<div class="line"><a name="l03497"></a><span class="lineno"> 3497</span>&#160; gbBaseVideoold = <a class="code" href="a00665.html#a4f95d12ae9db57753d1ce7447479f0ee">gbBaseVideo</a>;</div>
<div class="line"><a name="l03498"></a><span class="lineno"> 3498</span>&#160; <a class="code" href="a00665.html#a4f95d12ae9db57753d1ce7447479f0ee">gbBaseVideo</a> = TRUE;</div>
<div class="line"><a name="l03499"></a><span class="lineno"> 3499</span>&#160; </div>
<div class="line"><a name="l03500"></a><span class="lineno"> 3500</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00665.html#a7f72492be72deb72088a46321f3703e9">ProbeAndCaptureDevmode</a>(&amp;UnicodeDeviceName,</div>
<div class="line"><a name="l03501"></a><span class="lineno"> 3501</span>&#160; &amp;pdevmodeInformation,</div>
<div class="line"><a name="l03502"></a><span class="lineno"> 3502</span>&#160; &amp;sourceDevmodeInformation,</div>
<div class="line"><a name="l03503"></a><span class="lineno"> 3503</span>&#160; TRUE))</div>
<div class="line"><a name="l03504"></a><span class="lineno"> 3504</span>&#160; {</div>
<div class="line"><a name="l03505"></a><span class="lineno"> 3505</span>&#160; <a class="code" href="a00665.html#a4f95d12ae9db57753d1ce7447479f0ee">gbBaseVideo</a> = gbBaseVideoold;</div>
<div class="line"><a name="l03506"></a><span class="lineno"> 3506</span>&#160; </div>
<div class="line"><a name="l03507"></a><span class="lineno"> 3507</span>&#160; localDispInfo[i].<a class="code" href="a02605.html#a81f6c7e5df9c00e3f33e6e1a94ac75fc">hDev</a> = <a class="code" href="a00665.html#a64f37a06db6b3bcaf0b9bb15887675e6">UserLoadDisplayDriver</a>(&amp;<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i],</div>
<div class="line"><a name="l03508"></a><span class="lineno"> 3508</span>&#160; &amp;UnicodeDeviceName,</div>
<div class="line"><a name="l03509"></a><span class="lineno"> 3509</span>&#160; &amp;<a class="code" href="a03257.html#a9744bfca19a1b2f747cb8816a7685cd8">strDisplayDriver</a>,</div>
<div class="line"><a name="l03510"></a><span class="lineno"> 3510</span>&#160; pdevmodeInformation,</div>
<div class="line"><a name="l03511"></a><span class="lineno"> 3511</span>&#160; TRUE,</div>
<div class="line"><a name="l03512"></a><span class="lineno"> 3512</span>&#160; TRUE,</div>
<div class="line"><a name="l03513"></a><span class="lineno"> 3513</span>&#160; (PDEVICE_LOCK *)&amp;localDispInfo[i].pDevLock);</div>
<div class="line"><a name="l03514"></a><span class="lineno"> 3514</span>&#160; }</div>
<div class="line"><a name="l03515"></a><span class="lineno"> 3515</span>&#160; </div>
<div class="line"><a name="l03516"></a><span class="lineno"> 3516</span>&#160; <a class="code" href="a00665.html#a4f95d12ae9db57753d1ce7447479f0ee">gbBaseVideo</a> = gbBaseVideoold;</div>
<div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>&#160; }</div>
<div class="line"><a name="l03518"></a><span class="lineno"> 3518</span>&#160; </div>
<div class="line"><a name="l03519"></a><span class="lineno"> 3519</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03520"></a><span class="lineno"> 3520</span>&#160;<span class="comment"> * We failed everything - try the NULL DEVMODE which should always</span></div>
<div class="line"><a name="l03521"></a><span class="lineno"> 3521</span>&#160;<span class="comment"> * work.</span></div>
<div class="line"><a name="l03522"></a><span class="lineno"> 3522</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03523"></a><span class="lineno"> 3523</span>&#160; </div>
<div class="line"><a name="l03524"></a><span class="lineno"> 3524</span>&#160; <span class="keywordflow">if</span> (!localDispInfo[i].hDev) {</div>
<div class="line"><a name="l03525"></a><span class="lineno"> 3525</span>&#160; </div>
<div class="line"><a name="l03526"></a><span class="lineno"> 3526</span>&#160; <span class="keywordflow">if</span> (pdevmodeInformation &amp;&amp;</div>
<div class="line"><a name="l03527"></a><span class="lineno"> 3527</span>&#160; (pdevmodeInformation != &amp;sourceDevmodeInformation)) {</div>
<div class="line"><a name="l03528"></a><span class="lineno"> 3528</span>&#160; </div>
<div class="line"><a name="l03529"></a><span class="lineno"> 3529</span>&#160; UserFreePool(pdevmodeInformation);</div>
<div class="line"><a name="l03530"></a><span class="lineno"> 3530</span>&#160; pdevmodeInformation = NULL;</div>
<div class="line"><a name="l03531"></a><span class="lineno"> 3531</span>&#160; }</div>
<div class="line"><a name="l03532"></a><span class="lineno"> 3532</span>&#160; </div>
<div class="line"><a name="l03533"></a><span class="lineno"> 3533</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDriver: Trying default DEVMODE\n&quot;</span>));</div>
<div class="line"><a name="l03534"></a><span class="lineno"> 3534</span>&#160; </div>
<div class="line"><a name="l03535"></a><span class="lineno"> 3535</span>&#160; RtlZeroMemory(&amp;sourceDevmodeInformation, <span class="keyword">sizeof</span>(DEVMODEW));</div>
<div class="line"><a name="l03536"></a><span class="lineno"> 3536</span>&#160; sourceDevmodeInformation.dmSize = 0xDDDD;</div>
<div class="line"><a name="l03537"></a><span class="lineno"> 3537</span>&#160; pdevmodeInformation = &amp;sourceDevmodeInformation;</div>
<div class="line"><a name="l03538"></a><span class="lineno"> 3538</span>&#160; </div>
<div class="line"><a name="l03539"></a><span class="lineno"> 3539</span>&#160; <span class="keywordflow">if</span> (NT_SUCCESS(<a class="code" href="a00665.html#a1496fe4e3afa850f6bd625b0c3542b78">UserGetDisplayDriverParameters</a>(&amp;UnicodeDeviceName,</div>
<div class="line"><a name="l03540"></a><span class="lineno"> 3540</span>&#160; &amp;sourceDevmodeInformation,</div>
<div class="line"><a name="l03541"></a><span class="lineno"> 3541</span>&#160; TRUE))) {</div>
<div class="line"><a name="l03542"></a><span class="lineno"> 3542</span>&#160; </div>
<div class="line"><a name="l03543"></a><span class="lineno"> 3543</span>&#160; localDispInfo[i].<a class="code" href="a02605.html#a81f6c7e5df9c00e3f33e6e1a94ac75fc">hDev</a> = <a class="code" href="a00665.html#a64f37a06db6b3bcaf0b9bb15887675e6">UserLoadDisplayDriver</a>(&amp;<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i],</div>
<div class="line"><a name="l03544"></a><span class="lineno"> 3544</span>&#160; &amp;UnicodeDeviceName,</div>
<div class="line"><a name="l03545"></a><span class="lineno"> 3545</span>&#160; &amp;<a class="code" href="a03257.html#a9744bfca19a1b2f747cb8816a7685cd8">strDisplayDriver</a>,</div>
<div class="line"><a name="l03546"></a><span class="lineno"> 3546</span>&#160; pdevmodeInformation,</div>
<div class="line"><a name="l03547"></a><span class="lineno"> 3547</span>&#160; TRUE,</div>
<div class="line"><a name="l03548"></a><span class="lineno"> 3548</span>&#160; TRUE,</div>
<div class="line"><a name="l03549"></a><span class="lineno"> 3549</span>&#160; (PDEVICE_LOCK *)&amp;localDispInfo[i].pDevLock);</div>
<div class="line"><a name="l03550"></a><span class="lineno"> 3550</span>&#160; }</div>
<div class="line"><a name="l03551"></a><span class="lineno"> 3551</span>&#160; }</div>
<div class="line"><a name="l03552"></a><span class="lineno"> 3552</span>&#160; </div>
<div class="line"><a name="l03553"></a><span class="lineno"> 3553</span>&#160; <span class="keywordflow">if</span> (localDispInfo[i].hDev) {</div>
<div class="line"><a name="l03554"></a><span class="lineno"> 3554</span>&#160; </div>
<div class="line"><a name="l03555"></a><span class="lineno"> 3555</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDriver: Display Driver Loaded successfully\n&quot;</span>));</div>
<div class="line"><a name="l03556"></a><span class="lineno"> 3556</span>&#160; </div>
<div class="line"><a name="l03557"></a><span class="lineno"> 3557</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03558"></a><span class="lineno"> 3558</span>&#160;<span class="comment"> * We installed a display driver successfully, so we</span></div>
<div class="line"><a name="l03559"></a><span class="lineno"> 3559</span>&#160;<span class="comment"> * know to exit out of the loop successfully.</span></div>
<div class="line"><a name="l03560"></a><span class="lineno"> 3560</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03561"></a><span class="lineno"> 3561</span>&#160; displayInstalled = TRUE;</div>
<div class="line"><a name="l03562"></a><span class="lineno"> 3562</span>&#160; </div>
<div class="line"><a name="l03563"></a><span class="lineno"> 3563</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03564"></a><span class="lineno"> 3564</span>&#160;<span class="comment"> * Mark this device as being used so we do not free it&#39;s</span></div>
<div class="line"><a name="l03565"></a><span class="lineno"> 3565</span>&#160;<span class="comment"> * handle.</span></div>
<div class="line"><a name="l03566"></a><span class="lineno"> 3566</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03567"></a><span class="lineno"> 3567</span>&#160; bKeepDevice = TRUE;</div>
<div class="line"><a name="l03568"></a><span class="lineno"> 3568</span>&#160; </div>
<div class="line"><a name="l03569"></a><span class="lineno"> 3569</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03570"></a><span class="lineno"> 3570</span>&#160;<span class="comment"> * Mark this device as being part of the primary device</span></div>
<div class="line"><a name="l03571"></a><span class="lineno"> 3571</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03572"></a><span class="lineno"> 3572</span>&#160; <span class="keywordflow">if</span> (attached)</div>
<div class="line"><a name="l03573"></a><span class="lineno"> 3573</span>&#160; <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].<a class="code" href="a02601.html#a65e861fd574d4b5dd70d500641b395e8">stateFlags</a> |= DISPLAY_DEVICE_ATTACHED_TO_DESKTOP;</div>
<div class="line"><a name="l03574"></a><span class="lineno"> 3574</span>&#160; </div>
<div class="line"><a name="l03575"></a><span class="lineno"> 3575</span>&#160; <span class="keywordflow">if</span> (primary)</div>
<div class="line"><a name="l03576"></a><span class="lineno"> 3576</span>&#160; <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].<a class="code" href="a02601.html#a65e861fd574d4b5dd70d500641b395e8">stateFlags</a> |= DISPLAY_DEVICE_PRIMARY_DEVICE;</div>
<div class="line"><a name="l03577"></a><span class="lineno"> 3577</span>&#160; </div>
<div class="line"><a name="l03578"></a><span class="lineno"> 3578</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03579"></a><span class="lineno"> 3579</span>&#160;<span class="comment"> * Save the current mode for this device.</span></div>
<div class="line"><a name="l03580"></a><span class="lineno"> 3580</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>&#160; <a class="code" href="a00665.html#a744babe1f701ee80c5d81250e69c4db5">UserSaveCurrentMode</a>(NULL, &amp;<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i], pdevmodeInformation);</div>
<div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>&#160; </div>
<div class="line"><a name="l03583"></a><span class="lineno"> 3583</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l03584"></a><span class="lineno"> 3584</span>&#160; </div>
<div class="line"><a name="l03585"></a><span class="lineno"> 3585</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03586"></a><span class="lineno"> 3586</span>&#160;<span class="comment"> * If no display driver initialized with the requested</span></div>
<div class="line"><a name="l03587"></a><span class="lineno"> 3587</span>&#160;<span class="comment"> * settings, put a message in the error log.</span></div>
<div class="line"><a name="l03588"></a><span class="lineno"> 3588</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l03589"></a><span class="lineno"> 3589</span>&#160;<span class="comment"> * However, lets try to load the following device (like</span></div>
<div class="line"><a name="l03590"></a><span class="lineno"> 3590</span>&#160;<span class="comment"> * vga or vga RISC) so the user has a chance to repair</span></div>
<div class="line"><a name="l03591"></a><span class="lineno"> 3591</span>&#160;<span class="comment"> * it</span></div>
<div class="line"><a name="l03592"></a><span class="lineno"> 3592</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03593"></a><span class="lineno"> 3593</span>&#160; <a class="code" href="a00665.html#aa8b64103d379d1cc9e91a96db783aa63">UserLogDisplayDriverEvent</a>(MsgInvalidDisplayDriver);</div>
<div class="line"><a name="l03594"></a><span class="lineno"> 3594</span>&#160; }</div>
<div class="line"><a name="l03595"></a><span class="lineno"> 3595</span>&#160; </div>
<div class="line"><a name="l03596"></a><span class="lineno"> 3596</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03597"></a><span class="lineno"> 3597</span>&#160;<span class="comment"> * Free memory allocated by ProbeAndCaptureDevmode</span></div>
<div class="line"><a name="l03598"></a><span class="lineno"> 3598</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03599"></a><span class="lineno"> 3599</span>&#160; <span class="keywordflow">if</span> (pdevmodeInformation &amp;&amp;</div>
<div class="line"><a name="l03600"></a><span class="lineno"> 3600</span>&#160; (pdevmodeInformation != &amp;sourceDevmodeInformation)) {</div>
<div class="line"><a name="l03601"></a><span class="lineno"> 3601</span>&#160; </div>
<div class="line"><a name="l03602"></a><span class="lineno"> 3602</span>&#160; UserFreePool(pdevmodeInformation);</div>
<div class="line"><a name="l03603"></a><span class="lineno"> 3603</span>&#160; }</div>
<div class="line"><a name="l03604"></a><span class="lineno"> 3604</span>&#160; }</div>
<div class="line"><a name="l03605"></a><span class="lineno"> 3605</span>&#160; </div>
<div class="line"><a name="l03606"></a><span class="lineno"> 3606</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03607"></a><span class="lineno"> 3607</span>&#160;<span class="comment"> * Free the device if we are not going to use it.</span></div>
<div class="line"><a name="l03608"></a><span class="lineno"> 3608</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03609"></a><span class="lineno"> 3609</span>&#160; </div>
<div class="line"><a name="l03610"></a><span class="lineno"> 3610</span>&#160; <span class="keywordflow">if</span> (bKeepDevice == FALSE) {</div>
<div class="line"><a name="l03611"></a><span class="lineno"> 3611</span>&#160; <a class="code" href="a00665.html#ae1691bdb53d715053026f55f68e5d3f4">UserFreeDevice</a>(pphysinfo);</div>
<div class="line"><a name="l03612"></a><span class="lineno"> 3612</span>&#160; }</div>
<div class="line"><a name="l03613"></a><span class="lineno"> 3613</span>&#160; }</div>
<div class="line"><a name="l03614"></a><span class="lineno"> 3614</span>&#160; </div>
<div class="line"><a name="l03615"></a><span class="lineno"> 3615</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03616"></a><span class="lineno"> 3616</span>&#160;<span class="comment"> * Close the final registry handle if one remains</span></div>
<div class="line"><a name="l03617"></a><span class="lineno"> 3617</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03618"></a><span class="lineno"> 3618</span>&#160; <span class="keywordflow">if</span> (hkRegistry) {</div>
<div class="line"><a name="l03619"></a><span class="lineno"> 3619</span>&#160; ZwClose(hkRegistry);</div>
<div class="line"><a name="l03620"></a><span class="lineno"> 3620</span>&#160; hkRegistry = NULL;</div>
<div class="line"><a name="l03621"></a><span class="lineno"> 3621</span>&#160; }</div>
<div class="line"><a name="l03622"></a><span class="lineno"> 3622</span>&#160; </div>
<div class="line"><a name="l03623"></a><span class="lineno"> 3623</span>&#160; </div>
<div class="line"><a name="l03624"></a><span class="lineno"> 3624</span>&#160; </div>
<div class="line"><a name="l03631"></a><span class="lineno"> 3631</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03632"></a><span class="lineno"> 3632</span>&#160;<span class="comment"> * If we have more than one device that is attached to the desktop,</span></div>
<div class="line"><a name="l03633"></a><span class="lineno"> 3633</span>&#160;<span class="comment"> * then we need to determine which is the primary device</span></div>
<div class="line"><a name="l03634"></a><span class="lineno"> 3634</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l03635"></a><span class="lineno"> 3635</span>&#160;<span class="comment"> * MultiDriver devices are special - we only want to count all the</span></div>
<div class="line"><a name="l03636"></a><span class="lineno"> 3636</span>&#160;<span class="comment"> * multi-devices as *1* device, and use the *primary* one as the key</span></div>
<div class="line"><a name="l03637"></a><span class="lineno"> 3637</span>&#160;<span class="comment"> * device. In a multiDriver system, we will initially require all</span></div>
<div class="line"><a name="l03638"></a><span class="lineno"> 3638</span>&#160;<span class="comment"> * devices attached to the desktop to be controlled by the multiDriver.</span></div>
<div class="line"><a name="l03639"></a><span class="lineno"> 3639</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03640"></a><span class="lineno"> 3640</span>&#160; </div>
<div class="line"><a name="l03641"></a><span class="lineno"> 3641</span>&#160; mdevMultiDriver = (ULONG) -1;</div>
<div class="line"><a name="l03642"></a><span class="lineno"> 3642</span>&#160; </div>
<div class="line"><a name="l03643"></a><span class="lineno"> 3643</span>&#160; <span class="keywordflow">for</span> (i = 1; i &lt; <a class="code" href="a03257.html#a5f96c779e6c723388217ee64122dbec5">cphysDevInfo</a>; i++) {</div>
<div class="line"><a name="l03644"></a><span class="lineno"> 3644</span>&#160; </div>
<div class="line"><a name="l03645"></a><span class="lineno"> 3645</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDriver: gphysDevInfo has %08lx hdev&quot;</span>, localDispInfo[i].hDev));</div>
<div class="line"><a name="l03646"></a><span class="lineno"> 3646</span>&#160; </div>
<div class="line"><a name="l03647"></a><span class="lineno"> 3647</span>&#160; <span class="keywordflow">if</span> (localDispInfo[i].hDev) {</div>
<div class="line"><a name="l03648"></a><span class="lineno"> 3648</span>&#160; </div>
<div class="line"><a name="l03649"></a><span class="lineno"> 3649</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03650"></a><span class="lineno"> 3650</span>&#160;<span class="comment"> * Check for multi drivers, and see if the state is consistent.</span></div>
<div class="line"><a name="l03651"></a><span class="lineno"> 3651</span>&#160;<span class="comment"> * Right now, we require that if nay driver is multi, then all</span></div>
<div class="line"><a name="l03652"></a><span class="lineno"> 3652</span>&#160;<span class="comment"> * loaded drivers must be.</span></div>
<div class="line"><a name="l03653"></a><span class="lineno"> 3653</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03654"></a><span class="lineno"> 3654</span>&#160; <span class="keywordflow">if</span> (mdevMultiDriver == (ULONG) -1) {</div>
<div class="line"><a name="l03655"></a><span class="lineno"> 3655</span>&#160; mdevMultiDriver = <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].<a class="code" href="a02601.html#a65e861fd574d4b5dd70d500641b395e8">stateFlags</a> &amp; DISPLAY_DEVICE_MULTI_DRIVER;</div>
<div class="line"><a name="l03656"></a><span class="lineno"> 3656</span>&#160; }</div>
<div class="line"><a name="l03657"></a><span class="lineno"> 3657</span>&#160; </div>
<div class="line"><a name="l03658"></a><span class="lineno"> 3658</span>&#160; <span class="keywordflow">if</span> (mdevMultiDriver != (<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].stateFlags &amp; DISPLAY_DEVICE_MULTI_DRIVER)) {</div>
<div class="line"><a name="l03659"></a><span class="lineno"> 3659</span>&#160; </div>
<div class="line"><a name="l03660"></a><span class="lineno"> 3660</span>&#160; <a class="code" href="a00371.html#a162a73e20dfabca084a3ebb4581631a8">UserAssert</a>(mdevMultiDriver != DISPLAY_DEVICE_MULTI_DRIVER);</div>
<div class="line"><a name="l03661"></a><span class="lineno"> 3661</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l03662"></a><span class="lineno"> 3662</span>&#160; }</div>
<div class="line"><a name="l03663"></a><span class="lineno"> 3663</span>&#160; </div>
<div class="line"><a name="l03664"></a><span class="lineno"> 3664</span>&#160; </div>
<div class="line"><a name="l03665"></a><span class="lineno"> 3665</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03666"></a><span class="lineno"> 3666</span>&#160;<span class="comment"> * Keep track of the primary device.</span></div>
<div class="line"><a name="l03667"></a><span class="lineno"> 3667</span>&#160;<span class="comment"> * - Choose the first one, or even beter ...</span></div>
<div class="line"><a name="l03668"></a><span class="lineno"> 3668</span>&#160;<span class="comment"> * - Choose the first non-mirroring one, or even beter ...</span></div>
<div class="line"><a name="l03669"></a><span class="lineno"> 3669</span>&#160;<span class="comment"> * - Choose the one actually marked as primary</span></div>
<div class="line"><a name="l03670"></a><span class="lineno"> 3670</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03671"></a><span class="lineno"> 3671</span>&#160; </div>
<div class="line"><a name="l03672"></a><span class="lineno"> 3672</span>&#160; <span class="keywordflow">if</span> ((mdevPrimary == (ULONG) -1) ||</div>
<div class="line"><a name="l03673"></a><span class="lineno"> 3673</span>&#160; (<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].stateFlags &amp; DISPLAY_DEVICE_PRIMARY_DEVICE)) {</div>
<div class="line"><a name="l03674"></a><span class="lineno"> 3674</span>&#160; </div>
<div class="line"><a name="l03675"></a><span class="lineno"> 3675</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; - marking as Primary&quot;</span>));</div>
<div class="line"><a name="l03676"></a><span class="lineno"> 3676</span>&#160; </div>
<div class="line"><a name="l03677"></a><span class="lineno"> 3677</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03678"></a><span class="lineno"> 3678</span>&#160;<span class="comment"> * Raise an error if there are multiple primaries, unless</span></div>
<div class="line"><a name="l03679"></a><span class="lineno"> 3679</span>&#160;<span class="comment"> * it&#39;s ourself again !</span></div>
<div class="line"><a name="l03680"></a><span class="lineno"> 3680</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03681"></a><span class="lineno"> 3681</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].stateFlags &amp; DISPLAY_DEVICE_PRIMARY_DEVICE) {</div>
<div class="line"><a name="l03682"></a><span class="lineno"> 3682</span>&#160; </div>
<div class="line"><a name="l03683"></a><span class="lineno"> 3683</span>&#160; <span class="keywordflow">if</span> (mdevPrimaryset &amp;&amp; (mdevPrimary != i)) {</div>
<div class="line"><a name="l03684"></a><span class="lineno"> 3684</span>&#160; <a class="code" href="a00665.html#aa8b64103d379d1cc9e91a96db783aa63">UserLogDisplayDriverEvent</a>(MsgInvalidConfiguration);</div>
<div class="line"><a name="l03685"></a><span class="lineno"> 3685</span>&#160; }</div>
<div class="line"><a name="l03686"></a><span class="lineno"> 3686</span>&#160; mdevPrimaryset = TRUE;</div>
<div class="line"><a name="l03687"></a><span class="lineno"> 3687</span>&#160; }</div>
<div class="line"><a name="l03688"></a><span class="lineno"> 3688</span>&#160; </div>
<div class="line"><a name="l03689"></a><span class="lineno"> 3689</span>&#160; </div>
<div class="line"><a name="l03690"></a><span class="lineno"> 3690</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03691"></a><span class="lineno"> 3691</span>&#160;<span class="comment"> * Unmark the previous primary if necessary.</span></div>
<div class="line"><a name="l03692"></a><span class="lineno"> 3692</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03693"></a><span class="lineno"> 3693</span>&#160; </div>
<div class="line"><a name="l03694"></a><span class="lineno"> 3694</span>&#160; <span class="keywordflow">if</span> (mdevPrimary != (ULONG) -1) {</div>
<div class="line"><a name="l03695"></a><span class="lineno"> 3695</span>&#160; <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[mdevPrimary].<a class="code" href="a02601.html#a65e861fd574d4b5dd70d500641b395e8">stateFlags</a> &amp;= ~DISPLAY_DEVICE_PRIMARY_DEVICE;</div>
<div class="line"><a name="l03696"></a><span class="lineno"> 3696</span>&#160; }</div>
<div class="line"><a name="l03697"></a><span class="lineno"> 3697</span>&#160; </div>
<div class="line"><a name="l03698"></a><span class="lineno"> 3698</span>&#160; mdevPrimary = i;</div>
<div class="line"><a name="l03699"></a><span class="lineno"> 3699</span>&#160; <a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a81f6c7e5df9c00e3f33e6e1a94ac75fc">hDev</a> = localDispInfo[i].<a class="code" href="a02605.html#a81f6c7e5df9c00e3f33e6e1a94ac75fc">hDev</a>;</div>
<div class="line"><a name="l03700"></a><span class="lineno"> 3700</span>&#160; <a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a5e0929a8ef013061be966961b2eddbff">pDevLock</a> = localDispInfo[i].<a class="code" href="a02605.html#a5e0929a8ef013061be966961b2eddbff">pDevLock</a>;</div>
<div class="line"><a name="l03701"></a><span class="lineno"> 3701</span>&#160; <a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a76af5d5bf5f5037a7ddcd8bb543fd388">pDevInfo</a> = &amp;<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i];</div>
<div class="line"><a name="l03702"></a><span class="lineno"> 3702</span>&#160; <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].<a class="code" href="a02601.html#a65e861fd574d4b5dd70d500641b395e8">stateFlags</a> |= DISPLAY_DEVICE_PRIMARY_DEVICE;</div>
<div class="line"><a name="l03703"></a><span class="lineno"> 3703</span>&#160; </div>
<div class="line"><a name="l03704"></a><span class="lineno"> 3704</span>&#160; }</div>
<div class="line"><a name="l03705"></a><span class="lineno"> 3705</span>&#160; </div>
<div class="line"><a name="l03706"></a><span class="lineno"> 3706</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03707"></a><span class="lineno"> 3707</span>&#160;<span class="comment"> * Double check that we did not mark a mirror driver as primary</span></div>
<div class="line"><a name="l03708"></a><span class="lineno"> 3708</span>&#160;<span class="comment"> * when it was not specifically asked for.</span></div>
<div class="line"><a name="l03709"></a><span class="lineno"> 3709</span>&#160;<span class="comment"> * This could happen if the MIRROR driver was the *ONLY* driver</span></div>
<div class="line"><a name="l03710"></a><span class="lineno"> 3710</span>&#160;<span class="comment"> * that loaded on the system !</span></div>
<div class="line"><a name="l03711"></a><span class="lineno"> 3711</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03712"></a><span class="lineno"> 3712</span>&#160; </div>
<div class="line"><a name="l03713"></a><span class="lineno"> 3713</span>&#160; <span class="keywordflow">if</span> ((mdevPrimaryset == FALSE) &amp;&amp;</div>
<div class="line"><a name="l03714"></a><span class="lineno"> 3714</span>&#160; (<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[mdevPrimary].stateFlags &amp;</div>
<div class="line"><a name="l03715"></a><span class="lineno"> 3715</span>&#160; DISPLAY_DEVICE_MIRRORING_DRIVER)) {</div>
<div class="line"><a name="l03716"></a><span class="lineno"> 3716</span>&#160; </div>
<div class="line"><a name="l03717"></a><span class="lineno"> 3717</span>&#160; <a class="code" href="a00371.html#a162a73e20dfabca084a3ebb4581631a8">UserAssert</a>(FALSE);</div>
<div class="line"><a name="l03718"></a><span class="lineno"> 3718</span>&#160; }</div>
<div class="line"><a name="l03719"></a><span class="lineno"> 3719</span>&#160; }</div>
<div class="line"><a name="l03720"></a><span class="lineno"> 3720</span>&#160; </div>
<div class="line"><a name="l03721"></a><span class="lineno"> 3721</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;\n&quot;</span>));</div>
<div class="line"><a name="l03722"></a><span class="lineno"> 3722</span>&#160; }</div>
<div class="line"><a name="l03723"></a><span class="lineno"> 3723</span>&#160; </div>
<div class="line"><a name="l03724"></a><span class="lineno"> 3724</span>&#160; </div>
<div class="line"><a name="l03725"></a><span class="lineno"> 3725</span>&#160; </div>
<div class="line"><a name="l03732"></a><span class="lineno"> 3732</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03733"></a><span class="lineno"> 3733</span>&#160;<span class="comment"> * If the display drivers have been installed, then look for the</span></div>
<div class="line"><a name="l03734"></a><span class="lineno"> 3734</span>&#160;<span class="comment"> * Mirroring devices - as long as we are not in basevideo !</span></div>
<div class="line"><a name="l03735"></a><span class="lineno"> 3735</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03736"></a><span class="lineno"> 3736</span>&#160; <span class="keywordflow">if</span> (displayInstalled &amp;&amp;</div>
<div class="line"><a name="l03737"></a><span class="lineno"> 3737</span>&#160; (bAttachMirroring == FALSE) &amp;&amp;</div>
<div class="line"><a name="l03738"></a><span class="lineno"> 3738</span>&#160; !<a class="code" href="a00665.html#a4f95d12ae9db57753d1ce7447479f0ee">gbBaseVideo</a>) {</div>
<div class="line"><a name="l03739"></a><span class="lineno"> 3739</span>&#160; </div>
<div class="line"><a name="l03740"></a><span class="lineno"> 3740</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;\n\nUserInit: LoadDriver: Look for Mirroring drivers\n\n&quot;</span>));</div>
<div class="line"><a name="l03741"></a><span class="lineno"> 3741</span>&#160; bAttachMirroring = TRUE;</div>
<div class="line"><a name="l03742"></a><span class="lineno"> 3742</span>&#160; bCheckForAttached = TRUE;</div>
<div class="line"><a name="l03743"></a><span class="lineno"> 3743</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l03744"></a><span class="lineno"> 3744</span>&#160; }</div>
<div class="line"><a name="l03745"></a><span class="lineno"> 3745</span>&#160; </div>
<div class="line"><a name="l03746"></a><span class="lineno"> 3746</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03747"></a><span class="lineno"> 3747</span>&#160;<span class="comment"> * We must be done. So if we did install the display driver, just</span></div>
<div class="line"><a name="l03748"></a><span class="lineno"> 3748</span>&#160;<span class="comment"> * break out of this.</span></div>
<div class="line"><a name="l03749"></a><span class="lineno"> 3749</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03750"></a><span class="lineno"> 3750</span>&#160; <span class="keywordflow">if</span> (displayInstalled) {</div>
<div class="line"><a name="l03751"></a><span class="lineno"> 3751</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l03752"></a><span class="lineno"> 3752</span>&#160; }</div>
<div class="line"><a name="l03753"></a><span class="lineno"> 3753</span>&#160; </div>
<div class="line"><a name="l03754"></a><span class="lineno"> 3754</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03755"></a><span class="lineno"> 3755</span>&#160;<span class="comment"> * If we were searching for a basevideo device and did not find</span></div>
<div class="line"><a name="l03756"></a><span class="lineno"> 3756</span>&#160;<span class="comment"> * it, then start the search at 1 again, and look for attached</span></div>
<div class="line"><a name="l03757"></a><span class="lineno"> 3757</span>&#160;<span class="comment"> * devices.</span></div>
<div class="line"><a name="l03758"></a><span class="lineno"> 3758</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03759"></a><span class="lineno"> 3759</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00665.html#a4f95d12ae9db57753d1ce7447479f0ee">gbBaseVideo</a>) {</div>
<div class="line"><a name="l03760"></a><span class="lineno"> 3760</span>&#160; </div>
<div class="line"><a name="l03761"></a><span class="lineno"> 3761</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#a41f433389f20db57f042022a662e96de">RIP_WARNING</a>, <span class="stringliteral">&quot;\n\nUserInit: LoadDriver: BaseVideo device not found - use default&quot;</span>);</div>
<div class="line"><a name="l03762"></a><span class="lineno"> 3762</span>&#160; <a class="code" href="a00665.html#a4f95d12ae9db57753d1ce7447479f0ee">gbBaseVideo</a> = FALSE;</div>
<div class="line"><a name="l03763"></a><span class="lineno"> 3763</span>&#160; bCheckForAttached = TRUE;</div>
<div class="line"><a name="l03764"></a><span class="lineno"> 3764</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l03765"></a><span class="lineno"> 3765</span>&#160; }</div>
<div class="line"><a name="l03766"></a><span class="lineno"> 3766</span>&#160; </div>
<div class="line"><a name="l03767"></a><span class="lineno"> 3767</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03768"></a><span class="lineno"> 3768</span>&#160;<span class="comment"> * If we were searching for an attached device and did not find</span></div>
<div class="line"><a name="l03769"></a><span class="lineno"> 3769</span>&#160;<span class="comment"> * it, then start the search at 1 again, and look for anything.</span></div>
<div class="line"><a name="l03770"></a><span class="lineno"> 3770</span>&#160;<span class="comment"> * make sure we try all possible entries before giving up.</span></div>
<div class="line"><a name="l03771"></a><span class="lineno"> 3771</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l03772"></a><span class="lineno"> 3772</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03773"></a><span class="lineno"> 3773</span>&#160; <span class="keywordflow">if</span> (bCheckForAttached) {</div>
<div class="line"><a name="l03774"></a><span class="lineno"> 3774</span>&#160; </div>
<div class="line"><a name="l03775"></a><span class="lineno"> 3775</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;\n\nUserInit: LoadDriver: Attached device not found - use default\n\n&quot;</span>));</div>
<div class="line"><a name="l03776"></a><span class="lineno"> 3776</span>&#160; bCheckForAttached = FALSE;</div>
<div class="line"><a name="l03777"></a><span class="lineno"> 3777</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l03778"></a><span class="lineno"> 3778</span>&#160; }</div>
<div class="line"><a name="l03779"></a><span class="lineno"> 3779</span>&#160; </div>
<div class="line"><a name="l03780"></a><span class="lineno"> 3780</span>&#160; </div>
<div class="line"><a name="l03781"></a><span class="lineno"> 3781</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03782"></a><span class="lineno"> 3782</span>&#160;<span class="comment"> * There are no devices we can work with in the registry.</span></div>
<div class="line"><a name="l03783"></a><span class="lineno"> 3783</span>&#160;<span class="comment"> * We have a real failiure and take appropriate action.</span></div>
<div class="line"><a name="l03784"></a><span class="lineno"> 3784</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03785"></a><span class="lineno"> 3785</span>&#160; </div>
<div class="line"><a name="l03786"></a><span class="lineno"> 3786</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03787"></a><span class="lineno"> 3787</span>&#160;<span class="comment"> * If we failed on the first driver, then we can assume their is no</span></div>
<div class="line"><a name="l03788"></a><span class="lineno"> 3788</span>&#160;<span class="comment"> * driver installed.</span></div>
<div class="line"><a name="l03789"></a><span class="lineno"> 3789</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03790"></a><span class="lineno"> 3790</span>&#160; <span class="keywordflow">if</span> (i == 1) {</div>
<div class="line"><a name="l03791"></a><span class="lineno"> 3791</span>&#160; <a class="code" href="a00371.html#a31aafffb49dfe98bdc749c9b35c90162">RIPMSG1</a>(<a class="code" href="a00371.html#a41f433389f20db57f042022a662e96de">RIP_WARNING</a>,</div>
<div class="line"><a name="l03792"></a><span class="lineno"> 3792</span>&#160; <span class="stringliteral">&quot;UserInit: LoadDriver: No kernel driver entries under video reg-key: status=%#lx&quot;</span>,</div>
<div class="line"><a name="l03793"></a><span class="lineno"> 3793</span>&#160; Status);</div>
<div class="line"><a name="l03794"></a><span class="lineno"> 3794</span>&#160; </div>
<div class="line"><a name="l03795"></a><span class="lineno"> 3795</span>&#160; Status = STATUS_NO_SUCH_DEVICE;</div>
<div class="line"><a name="l03796"></a><span class="lineno"> 3796</span>&#160; hardErrorString = L<span class="stringliteral">&quot;KERNEL_VIDEO_DRIVER.SYS&quot;</span>;</div>
<div class="line"><a name="l03797"></a><span class="lineno"> 3797</span>&#160; <span class="keywordflow">goto</span> userServerHardError;</div>
<div class="line"><a name="l03798"></a><span class="lineno"> 3798</span>&#160; }</div>
<div class="line"><a name="l03799"></a><span class="lineno"> 3799</span>&#160; </div>
<div class="line"><a name="l03800"></a><span class="lineno"> 3800</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03801"></a><span class="lineno"> 3801</span>&#160;<span class="comment"> * If the display driver is not installed, then this is another</span></div>
<div class="line"><a name="l03802"></a><span class="lineno"> 3802</span>&#160;<span class="comment"> * bad failiure - report it.</span></div>
<div class="line"><a name="l03803"></a><span class="lineno"> 3803</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03804"></a><span class="lineno"> 3804</span>&#160; <span class="keywordflow">if</span> (!displayInstalled) {</div>
<div class="line"><a name="l03805"></a><span class="lineno"> 3805</span>&#160; <a class="code" href="a00371.html#a31aafffb49dfe98bdc749c9b35c90162">RIPMSG1</a>(<a class="code" href="a00371.html#a41f433389f20db57f042022a662e96de">RIP_WARNING</a>,</div>
<div class="line"><a name="l03806"></a><span class="lineno"> 3806</span>&#160; <span class="stringliteral">&quot;UserInit: LoadDriver: Kernel driver not found in registry: status=%#lx&quot;</span>,</div>
<div class="line"><a name="l03807"></a><span class="lineno"> 3807</span>&#160; Status);</div>
<div class="line"><a name="l03808"></a><span class="lineno"> 3808</span>&#160; </div>
<div class="line"><a name="l03809"></a><span class="lineno"> 3809</span>&#160; Status = STATUS_NO_SUCH_DEVICE;</div>
<div class="line"><a name="l03810"></a><span class="lineno"> 3810</span>&#160; hardErrorString = L<span class="stringliteral">&quot;DISPLAY_DRIVER.DLL&quot;</span>;</div>
<div class="line"><a name="l03811"></a><span class="lineno"> 3811</span>&#160; <span class="keywordflow">goto</span> userServerHardError;</div>
<div class="line"><a name="l03812"></a><span class="lineno"> 3812</span>&#160; }</div>
<div class="line"><a name="l03813"></a><span class="lineno"> 3813</span>&#160; </div>
<div class="line"><a name="l03814"></a><span class="lineno"> 3814</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03815"></a><span class="lineno"> 3815</span>&#160;<span class="comment"> * Never get here !</span></div>
<div class="line"><a name="l03816"></a><span class="lineno"> 3816</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03817"></a><span class="lineno"> 3817</span>&#160; </div>
<div class="line"><a name="l03818"></a><span class="lineno"> 3818</span>&#160; }</div>
<div class="line"><a name="l03819"></a><span class="lineno"> 3819</span>&#160; </div>
<div class="line"><a name="l03820"></a><span class="lineno"> 3820</span>&#160; </div>
<div class="line"><a name="l03826"></a><span class="lineno"> 3826</span>&#160; k = 0;</div>
<div class="line"><a name="l03827"></a><span class="lineno"> 3827</span>&#160; </div>
<div class="line"><a name="l03828"></a><span class="lineno"> 3828</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03829"></a><span class="lineno"> 3829</span>&#160;<span class="comment"> * If we have more than one device that is attached to the desktop,</span></div>
<div class="line"><a name="l03830"></a><span class="lineno"> 3830</span>&#160;<span class="comment"> * then we need to create the META structure for that device,</span></div>
<div class="line"><a name="l03831"></a><span class="lineno"> 3831</span>&#160;<span class="comment"> * initialize it, and use that as the primary device.</span></div>
<div class="line"><a name="l03832"></a><span class="lineno"> 3832</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03833"></a><span class="lineno"> 3833</span>&#160; </div>
<div class="line"><a name="l03834"></a><span class="lineno"> 3834</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;\nUserInit: LoadDriver: Building MDEV\n\n&quot;</span>));</div>
<div class="line"><a name="l03835"></a><span class="lineno"> 3835</span>&#160; </div>
<div class="line"><a name="l03836"></a><span class="lineno"> 3836</span>&#160; <span class="keywordflow">for</span> (i = 1; i &lt; <a class="code" href="a03257.html#a5f96c779e6c723388217ee64122dbec5">cphysDevInfo</a>; i++) {</div>
<div class="line"><a name="l03837"></a><span class="lineno"> 3837</span>&#160; </div>
<div class="line"><a name="l03838"></a><span class="lineno"> 3838</span>&#160; <span class="keywordflow">if</span> (localDispInfo[i].hDev) {</div>
<div class="line"><a name="l03839"></a><span class="lineno"> 3839</span>&#160; </div>
<div class="line"><a name="l03840"></a><span class="lineno"> 3840</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03841"></a><span class="lineno"> 3841</span>&#160;<span class="comment"> * Build up the MDEV</span></div>
<div class="line"><a name="l03842"></a><span class="lineno"> 3842</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03843"></a><span class="lineno"> 3843</span>&#160; mdev-&gt;mdevID = <span class="stringliteral">&#39;MDEV&#39;</span>;</div>
<div class="line"><a name="l03844"></a><span class="lineno"> 3844</span>&#160; mdev-&gt;cmdev = k + 1;</div>
<div class="line"><a name="l03845"></a><span class="lineno"> 3845</span>&#160; mdev-&gt;mdevPos[k].hdev = localDispInfo[i].<a class="code" href="a02605.html#a81f6c7e5df9c00e3f33e6e1a94ac75fc">hDev</a>;</div>
<div class="line"><a name="l03846"></a><span class="lineno"> 3846</span>&#160; mdev-&gt;mdevPos[k].flags = (<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].<a class="code" href="a02601.html#a65e861fd574d4b5dd70d500641b395e8">stateFlags</a> &amp;</div>
<div class="line"><a name="l03847"></a><span class="lineno"> 3847</span>&#160; DISPLAY_DEVICE_PRIMARY_DEVICE) ? 1 : 0;</div>
<div class="line"><a name="l03848"></a><span class="lineno"> 3848</span>&#160; </div>
<div class="line"><a name="l03849"></a><span class="lineno"> 3849</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03850"></a><span class="lineno"> 3850</span>&#160;<span class="comment"> * The top left is based on the registry coordinates</span></div>
<div class="line"><a name="l03851"></a><span class="lineno"> 3851</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03852"></a><span class="lineno"> 3852</span>&#160; mdev-&gt;mdevPos[k].rcPos.left =</div>
<div class="line"><a name="l03853"></a><span class="lineno"> 3853</span>&#160; (localDispInfo[i].<a class="code" href="a02605.html#a263f5b35c44d9f9ae5c74acae8037644">rcScreen</a>.left == <a class="code" href="a00665.html#accf086041259110de4bd6aac57f64279">DEFAULT_POS_VALUE</a>) ? 0 :</div>
<div class="line"><a name="l03854"></a><span class="lineno"> 3854</span>&#160; localDispInfo[i].<a class="code" href="a00020.html#a263f5b35c44d9f9ae5c74acae8037644">rcScreen</a>.left -</div>
<div class="line"><a name="l03855"></a><span class="lineno"> 3855</span>&#160; (<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].<a class="code" href="a02601.html#a19bee6963f84c40169f417b39bc46059">pCurrentDevmode</a>-&gt;dmPelsWidth / 2);</div>
<div class="line"><a name="l03856"></a><span class="lineno"> 3856</span>&#160; mdev-&gt;mdevPos[k].rcPos.top =</div>
<div class="line"><a name="l03857"></a><span class="lineno"> 3857</span>&#160; (localDispInfo[i].<a class="code" href="a02605.html#a263f5b35c44d9f9ae5c74acae8037644">rcScreen</a>.top == <a class="code" href="a00665.html#accf086041259110de4bd6aac57f64279">DEFAULT_POS_VALUE</a>) ? 0 :</div>
<div class="line"><a name="l03858"></a><span class="lineno"> 3858</span>&#160; localDispInfo[i].<a class="code" href="a00020.html#a263f5b35c44d9f9ae5c74acae8037644">rcScreen</a>.top -</div>
<div class="line"><a name="l03859"></a><span class="lineno"> 3859</span>&#160; (<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].<a class="code" href="a02601.html#a19bee6963f84c40169f417b39bc46059">pCurrentDevmode</a>-&gt;dmPelsHeight / 2);</div>
<div class="line"><a name="l03860"></a><span class="lineno"> 3860</span>&#160; </div>
<div class="line"><a name="l03861"></a><span class="lineno"> 3861</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03862"></a><span class="lineno"> 3862</span>&#160;<span class="comment"> * The lower right is based on the size of the DEVMODE.</span></div>
<div class="line"><a name="l03863"></a><span class="lineno"> 3863</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03864"></a><span class="lineno"> 3864</span>&#160; mdev-&gt;mdevPos[k].rcPos.right =</div>
<div class="line"><a name="l03865"></a><span class="lineno"> 3865</span>&#160; mdev-&gt;mdevPos[k].rcPos.left +</div>
<div class="line"><a name="l03866"></a><span class="lineno"> 3866</span>&#160; <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].<a class="code" href="a02601.html#a19bee6963f84c40169f417b39bc46059">pCurrentDevmode</a>-&gt;dmPelsWidth;</div>
<div class="line"><a name="l03867"></a><span class="lineno"> 3867</span>&#160; mdev-&gt;mdevPos[k].rcPos.bottom =</div>
<div class="line"><a name="l03868"></a><span class="lineno"> 3868</span>&#160; mdev-&gt;mdevPos[k].rcPos.top +</div>
<div class="line"><a name="l03869"></a><span class="lineno"> 3869</span>&#160; <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].<a class="code" href="a02601.html#a19bee6963f84c40169f417b39bc46059">pCurrentDevmode</a>-&gt;dmPelsHeight;</div>
<div class="line"><a name="l03870"></a><span class="lineno"> 3870</span>&#160; </div>
<div class="line"><a name="l03871"></a><span class="lineno"> 3871</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;\n\nUserInit: LoadDriver: multiDriver %d - %d, %d, %d, %d\n&quot;</span>,</div>
<div class="line"><a name="l03872"></a><span class="lineno"> 3872</span>&#160; i,</div>
<div class="line"><a name="l03873"></a><span class="lineno"> 3873</span>&#160; mdev-&gt;mdevPos[k].rcPos.left, mdev-&gt;mdevPos[k].rcPos.top,</div>
<div class="line"><a name="l03874"></a><span class="lineno"> 3874</span>&#160; mdev-&gt;mdevPos[k].rcPos.right, mdev-&gt;mdevPos[k].rcPos.bottom));</div>
<div class="line"><a name="l03875"></a><span class="lineno"> 3875</span>&#160; </div>
<div class="line"><a name="l03876"></a><span class="lineno"> 3876</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03877"></a><span class="lineno"> 3877</span>&#160;<span class="comment"> * Next driver.</span></div>
<div class="line"><a name="l03878"></a><span class="lineno"> 3878</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03879"></a><span class="lineno"> 3879</span>&#160; </div>
<div class="line"><a name="l03880"></a><span class="lineno"> 3880</span>&#160; k++;</div>
<div class="line"><a name="l03881"></a><span class="lineno"> 3881</span>&#160; }</div>
<div class="line"><a name="l03882"></a><span class="lineno"> 3882</span>&#160; }</div>
<div class="line"><a name="l03883"></a><span class="lineno"> 3883</span>&#160; </div>
<div class="line"><a name="l03884"></a><span class="lineno"> 3884</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03885"></a><span class="lineno"> 3885</span>&#160;<span class="comment"> * If we have no primary at this point, we are in trouble !</span></div>
<div class="line"><a name="l03886"></a><span class="lineno"> 3886</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03887"></a><span class="lineno"> 3887</span>&#160; <span class="keywordflow">if</span> ((k == 0) || (mdevPrimary == (ULONG) -1)) {</div>
<div class="line"><a name="l03888"></a><span class="lineno"> 3888</span>&#160; <a class="code" href="a00371.html#a162a73e20dfabca084a3ebb4581631a8">UserAssert</a>(mdevPrimary != (ULONG) -1);</div>
<div class="line"><a name="l03889"></a><span class="lineno"> 3889</span>&#160; <a class="code" href="a00371.html#a162a73e20dfabca084a3ebb4581631a8">UserAssert</a>(k != 0);</div>
<div class="line"><a name="l03890"></a><span class="lineno"> 3890</span>&#160; k = 0;</div>
<div class="line"><a name="l03891"></a><span class="lineno"> 3891</span>&#160; }</div>
<div class="line"><a name="l03892"></a><span class="lineno"> 3892</span>&#160; </div>
<div class="line"><a name="l03893"></a><span class="lineno"> 3893</span>&#160; </div>
<div class="line"><a name="l03894"></a><span class="lineno"> 3894</span>&#160; </div>
<div class="line"><a name="l03895"></a><span class="lineno"> 3895</span>&#160; </div>
<div class="line"><a name="l03901"></a><span class="lineno"> 3901</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03902"></a><span class="lineno"> 3902</span>&#160;<span class="comment"> * If we have a multi-driver, we must first make sure all the rectangles</span></div>
<div class="line"><a name="l03903"></a><span class="lineno"> 3903</span>&#160;<span class="comment"> * actually make up a larger rectangle, since a META surface handled by a</span></div>
<div class="line"><a name="l03904"></a><span class="lineno"> 3904</span>&#160;<span class="comment"> * single driver must be rectangular.</span></div>
<div class="line"><a name="l03905"></a><span class="lineno"> 3905</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03906"></a><span class="lineno"> 3906</span>&#160; <span class="keywordflow">if</span> (k &amp;&amp; (mdevMultiDriver == DISPLAY_DEVICE_MULTI_DRIVER)) {</div>
<div class="line"><a name="l03907"></a><span class="lineno"> 3907</span>&#160; </div>
<div class="line"><a name="l03908"></a><span class="lineno"> 3908</span>&#160; MDEV_RECT tmpRect[7];</div>
<div class="line"><a name="l03909"></a><span class="lineno"> 3909</span>&#160; RECTL emptyRect = {0};</div>
<div class="line"><a name="l03910"></a><span class="lineno"> 3910</span>&#160; ULONG crect = mdev-&gt;cmdev;</div>
<div class="line"><a name="l03911"></a><span class="lineno"> 3911</span>&#160; </div>
<div class="line"><a name="l03912"></a><span class="lineno"> 3912</span>&#160; memcpy(&amp;(tmpRect[0]), &amp;(mdev-&gt;mdevPos[0]), mdev-&gt;cmdev * <span class="keyword">sizeof</span>(MDEV_RECT));</div>
<div class="line"><a name="l03913"></a><span class="lineno"> 3913</span>&#160; </div>
<div class="line"><a name="l03914"></a><span class="lineno"> 3914</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;\n\nUserInit: LoadDriver: multiDriver system\n\n\n&quot;</span>));</div>
<div class="line"><a name="l03915"></a><span class="lineno"> 3915</span>&#160; </div>
<div class="line"><a name="l03916"></a><span class="lineno"> 3916</span>&#160; <span class="keywordflow">for</span> (i=0; i &lt; mdev-&gt;cmdev; i++) {</div>
<div class="line"><a name="l03917"></a><span class="lineno"> 3917</span>&#160; <span class="keywordflow">for</span> (ii=0; ii &lt; mdev-&gt;cmdev; ii++) {</div>
<div class="line"><a name="l03918"></a><span class="lineno"> 3918</span>&#160; <span class="keywordflow">for</span> (iii=0; iii &lt; mdev-&gt;cmdev; iii++) {</div>
<div class="line"><a name="l03919"></a><span class="lineno"> 3919</span>&#160; </div>
<div class="line"><a name="l03920"></a><span class="lineno"> 3920</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03921"></a><span class="lineno"> 3921</span>&#160;<span class="comment"> * Don&#39;t merge the same rectangle together</span></div>
<div class="line"><a name="l03922"></a><span class="lineno"> 3922</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03923"></a><span class="lineno"> 3923</span>&#160; <span class="keywordflow">if</span> (ii == iii)</div>
<div class="line"><a name="l03924"></a><span class="lineno"> 3924</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l03925"></a><span class="lineno"> 3925</span>&#160; </div>
<div class="line"><a name="l03926"></a><span class="lineno"> 3926</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03927"></a><span class="lineno"> 3927</span>&#160;<span class="comment"> * Don&#39;t merge an empty rectangle</span></div>
<div class="line"><a name="l03928"></a><span class="lineno"> 3928</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03929"></a><span class="lineno"> 3929</span>&#160; <span class="keywordflow">if</span> ((tmpRect[ii].rcPos.left == 0) &amp;&amp;</div>
<div class="line"><a name="l03930"></a><span class="lineno"> 3930</span>&#160; (tmpRect[ii].rcPos.right == 0))</div>
<div class="line"><a name="l03931"></a><span class="lineno"> 3931</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l03932"></a><span class="lineno"> 3932</span>&#160; </div>
<div class="line"><a name="l03933"></a><span class="lineno"> 3933</span>&#160; <span class="keywordflow">if</span> ((tmpRect[iii].rcPos.left == tmpRect[ii].rcPos.left) &amp;&amp;</div>
<div class="line"><a name="l03934"></a><span class="lineno"> 3934</span>&#160; (tmpRect[iii].rcPos.right == tmpRect[ii].rcPos.right)) {</div>
<div class="line"><a name="l03935"></a><span class="lineno"> 3935</span>&#160; </div>
<div class="line"><a name="l03936"></a><span class="lineno"> 3936</span>&#160; <span class="keywordflow">if</span> (tmpRect[iii].rcPos.bottom == tmpRect[ii].rcPos.top) {</div>
<div class="line"><a name="l03937"></a><span class="lineno"> 3937</span>&#160; </div>
<div class="line"><a name="l03938"></a><span class="lineno"> 3938</span>&#160; tmpRect[ii].rcPos.top = tmpRect[iii].rcPos.top;</div>
<div class="line"><a name="l03939"></a><span class="lineno"> 3939</span>&#160; tmpRect[iii].rcPos = emptyRect;</div>
<div class="line"><a name="l03940"></a><span class="lineno"> 3940</span>&#160; crect--;</div>
<div class="line"><a name="l03941"></a><span class="lineno"> 3941</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l03942"></a><span class="lineno"> 3942</span>&#160; }</div>
<div class="line"><a name="l03943"></a><span class="lineno"> 3943</span>&#160; </div>
<div class="line"><a name="l03944"></a><span class="lineno"> 3944</span>&#160; <span class="keywordflow">if</span> (tmpRect[ii].rcPos.bottom == tmpRect[iii].rcPos.top) {</div>
<div class="line"><a name="l03945"></a><span class="lineno"> 3945</span>&#160; </div>
<div class="line"><a name="l03946"></a><span class="lineno"> 3946</span>&#160; tmpRect[iii].rcPos.top = tmpRect[ii].rcPos.top;</div>
<div class="line"><a name="l03947"></a><span class="lineno"> 3947</span>&#160; tmpRect[ii].rcPos = emptyRect;</div>
<div class="line"><a name="l03948"></a><span class="lineno"> 3948</span>&#160; crect--;</div>
<div class="line"><a name="l03949"></a><span class="lineno"> 3949</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l03950"></a><span class="lineno"> 3950</span>&#160; }</div>
<div class="line"><a name="l03951"></a><span class="lineno"> 3951</span>&#160; }</div>
<div class="line"><a name="l03952"></a><span class="lineno"> 3952</span>&#160; </div>
<div class="line"><a name="l03953"></a><span class="lineno"> 3953</span>&#160; <span class="keywordflow">if</span> ((tmpRect[iii].rcPos.top == tmpRect[ii].rcPos.top) &amp;&amp;</div>
<div class="line"><a name="l03954"></a><span class="lineno"> 3954</span>&#160; (tmpRect[iii].rcPos.bottom == tmpRect[ii].rcPos.bottom)) {</div>
<div class="line"><a name="l03955"></a><span class="lineno"> 3955</span>&#160; </div>
<div class="line"><a name="l03956"></a><span class="lineno"> 3956</span>&#160; <span class="keywordflow">if</span> (tmpRect[iii].rcPos.left == tmpRect[ii].rcPos.right) {</div>
<div class="line"><a name="l03957"></a><span class="lineno"> 3957</span>&#160; </div>
<div class="line"><a name="l03958"></a><span class="lineno"> 3958</span>&#160; tmpRect[ii].rcPos.right = tmpRect[iii].rcPos.right;</div>
<div class="line"><a name="l03959"></a><span class="lineno"> 3959</span>&#160; tmpRect[iii].rcPos = emptyRect;</div>
<div class="line"><a name="l03960"></a><span class="lineno"> 3960</span>&#160; crect--;</div>
<div class="line"><a name="l03961"></a><span class="lineno"> 3961</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l03962"></a><span class="lineno"> 3962</span>&#160; }</div>
<div class="line"><a name="l03963"></a><span class="lineno"> 3963</span>&#160; </div>
<div class="line"><a name="l03964"></a><span class="lineno"> 3964</span>&#160; <span class="keywordflow">if</span> (tmpRect[ii].rcPos.left == tmpRect[iii].rcPos.right) {</div>
<div class="line"><a name="l03965"></a><span class="lineno"> 3965</span>&#160; </div>
<div class="line"><a name="l03966"></a><span class="lineno"> 3966</span>&#160; tmpRect[iii].rcPos.right = tmpRect[ii].rcPos.right;</div>
<div class="line"><a name="l03967"></a><span class="lineno"> 3967</span>&#160; tmpRect[ii].rcPos = emptyRect;</div>
<div class="line"><a name="l03968"></a><span class="lineno"> 3968</span>&#160; crect--;</div>
<div class="line"><a name="l03969"></a><span class="lineno"> 3969</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l03970"></a><span class="lineno"> 3970</span>&#160; }</div>
<div class="line"><a name="l03971"></a><span class="lineno"> 3971</span>&#160; }</div>
<div class="line"><a name="l03972"></a><span class="lineno"> 3972</span>&#160; }</div>
<div class="line"><a name="l03973"></a><span class="lineno"> 3973</span>&#160; }</div>
<div class="line"><a name="l03974"></a><span class="lineno"> 3974</span>&#160; }</div>
<div class="line"><a name="l03975"></a><span class="lineno"> 3975</span>&#160; </div>
<div class="line"><a name="l03976"></a><span class="lineno"> 3976</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l03977"></a><span class="lineno"> 3977</span>&#160;<span class="comment"> * If we do not end up with a rectangle based at 0,0, we will want to</span></div>
<div class="line"><a name="l03978"></a><span class="lineno"> 3978</span>&#160;<span class="comment"> * boot with only one screen and let the user fix the configuration.</span></div>
<div class="line"><a name="l03979"></a><span class="lineno"> 3979</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l03980"></a><span class="lineno"> 3980</span>&#160; </div>
<div class="line"><a name="l03981"></a><span class="lineno"> 3981</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;\n&quot;</span>));</div>
<div class="line"><a name="l03982"></a><span class="lineno"> 3982</span>&#160; </div>
<div class="line"><a name="l03983"></a><span class="lineno"> 3983</span>&#160; <span class="keywordflow">for</span> (i=0; i &lt; mdev-&gt;cmdev; i++) {</div>
<div class="line"><a name="l03984"></a><span class="lineno"> 3984</span>&#160; </div>
<div class="line"><a name="l03985"></a><span class="lineno"> 3985</span>&#160; <span class="keywordflow">if</span> ((tmpRect[i].rcPos.left != 0) ||</div>
<div class="line"><a name="l03986"></a><span class="lineno"> 3986</span>&#160; (tmpRect[i].rcPos.top != 0)) {</div>
<div class="line"><a name="l03987"></a><span class="lineno"> 3987</span>&#160; </div>
<div class="line"><a name="l03988"></a><span class="lineno"> 3988</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;\n&quot;</span>));</div>
<div class="line"><a name="l03989"></a><span class="lineno"> 3989</span>&#160; crect = 0;</div>
<div class="line"><a name="l03990"></a><span class="lineno"> 3990</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l03991"></a><span class="lineno"> 3991</span>&#160; }</div>
<div class="line"><a name="l03992"></a><span class="lineno"> 3992</span>&#160; }</div>
<div class="line"><a name="l03993"></a><span class="lineno"> 3993</span>&#160; </div>
<div class="line"><a name="l03994"></a><span class="lineno"> 3994</span>&#160; <span class="keywordflow">if</span> (crect != 1) {</div>
<div class="line"><a name="l03995"></a><span class="lineno"> 3995</span>&#160; </div>
<div class="line"><a name="l03996"></a><span class="lineno"> 3996</span>&#160; <a class="code" href="a00371.html#a162a73e20dfabca084a3ebb4581631a8">UserAssert</a>(crect == 1);</div>
<div class="line"><a name="l03997"></a><span class="lineno"> 3997</span>&#160; <a class="code" href="a00665.html#aa8b64103d379d1cc9e91a96db783aa63">UserLogDisplayDriverEvent</a>(MsgInvalidConfiguration);</div>
<div class="line"><a name="l03998"></a><span class="lineno"> 3998</span>&#160; </div>
<div class="line"><a name="l03999"></a><span class="lineno"> 3999</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l04000"></a><span class="lineno"> 4000</span>&#160;<span class="comment"> * Rebuild a one device MDEV with offset at zero, and the original</span></div>
<div class="line"><a name="l04001"></a><span class="lineno"> 4001</span>&#160;<span class="comment"> * devmode dimenstions (we know those are good).</span></div>
<div class="line"><a name="l04002"></a><span class="lineno"> 4002</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l04003"></a><span class="lineno"> 4003</span>&#160; mdev-&gt;mdevID = <span class="stringliteral">&#39;MDEV&#39;</span>;</div>
<div class="line"><a name="l04004"></a><span class="lineno"> 4004</span>&#160; mdev-&gt;cmdev = 1;</div>
<div class="line"><a name="l04005"></a><span class="lineno"> 4005</span>&#160; mdev-&gt;mdevPos[0].hdev = mdev-&gt;mdevPos[0].hdev;</div>
<div class="line"><a name="l04006"></a><span class="lineno"> 4006</span>&#160; mdev-&gt;mdevPos[0].flags = 0;</div>
<div class="line"><a name="l04007"></a><span class="lineno"> 4007</span>&#160; mdev-&gt;mdevPos[0].rcPos.right -= mdev-&gt;mdevPos[0].rcPos.left;</div>
<div class="line"><a name="l04008"></a><span class="lineno"> 4008</span>&#160; mdev-&gt;mdevPos[0].rcPos.bottom -= mdev-&gt;mdevPos[0].rcPos.top;</div>
<div class="line"><a name="l04009"></a><span class="lineno"> 4009</span>&#160; mdev-&gt;mdevPos[0].rcPos.left = 0;</div>
<div class="line"><a name="l04010"></a><span class="lineno"> 4010</span>&#160; mdev-&gt;mdevPos[0].rcPos.top = 0;</div>
<div class="line"><a name="l04011"></a><span class="lineno"> 4011</span>&#160; </div>
<div class="line"><a name="l04012"></a><span class="lineno"> 4012</span>&#160; }</div>
<div class="line"><a name="l04013"></a><span class="lineno"> 4013</span>&#160; </div>
<div class="line"><a name="l04014"></a><span class="lineno"> 4014</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l04015"></a><span class="lineno"> 4015</span>&#160; <span class="comment">// BUGBUG NULL terminate the string</span></div>
<div class="line"><a name="l04016"></a><span class="lineno"> 4016</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l04017"></a><span class="lineno"> 4017</span>&#160; </div>
<div class="line"><a name="l04018"></a><span class="lineno"> 4018</span>&#160; <a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a81f6c7e5df9c00e3f33e6e1a94ac75fc">hDev</a> = GreCreateHDEV(<a class="code" href="a03257.html#a9744bfca19a1b2f747cb8816a7685cd8">strDisplayDriver</a>.Buffer,</div>
<div class="line"><a name="l04019"></a><span class="lineno"> 4019</span>&#160; (LPDEVMODEW) &amp;mdev,</div>
<div class="line"><a name="l04020"></a><span class="lineno"> 4020</span>&#160; NULL,</div>
<div class="line"><a name="l04021"></a><span class="lineno"> 4021</span>&#160; TRUE,</div>
<div class="line"><a name="l04022"></a><span class="lineno"> 4022</span>&#160; (PDEVICE_LOCK *)&amp;<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a5e0929a8ef013061be966961b2eddbff">pDevLock</a>);</div>
<div class="line"><a name="l04023"></a><span class="lineno"> 4023</span>&#160; </div>
<div class="line"><a name="l04024"></a><span class="lineno"> 4024</span>&#160; </div>
<div class="line"><a name="l04025"></a><span class="lineno"> 4025</span>&#160; <a class="code" href="a00665.html#a762f2fbf9a0ad4d9a63f7c92adce1297">bMultipleDisplaySystem</a> = TRUE;</div>
<div class="line"><a name="l04026"></a><span class="lineno"> 4026</span>&#160; </div>
<div class="line"><a name="l04027"></a><span class="lineno"> 4027</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (k &gt; 1) {</div>
<div class="line"><a name="l04028"></a><span class="lineno"> 4028</span>&#160; </div>
<div class="line"><a name="l04029"></a><span class="lineno"> 4029</span>&#160; </div>
<div class="line"><a name="l04030"></a><span class="lineno"> 4030</span>&#160; </div>
<div class="line"><a name="l04036"></a><span class="lineno"> 4036</span>&#160; ULONG color = 0;</div>
<div class="line"><a name="l04037"></a><span class="lineno"> 4037</span>&#160; </div>
<div class="line"><a name="l04038"></a><span class="lineno"> 4038</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDriver: Got MDEV - parse MDEV data\n&quot;</span>));</div>
<div class="line"><a name="l04039"></a><span class="lineno"> 4039</span>&#160; </div>
<div class="line"><a name="l04040"></a><span class="lineno"> 4040</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l04041"></a><span class="lineno"> 4041</span>&#160;<span class="comment"> * Lets make sure all rectangles are at the same position for now.</span></div>
<div class="line"><a name="l04042"></a><span class="lineno"> 4042</span>&#160;<span class="comment"> * Lets also make sure the color depths match.</span></div>
<div class="line"><a name="l04043"></a><span class="lineno"> 4043</span>&#160;<span class="comment"> * If they are not, let&#39;s just default back to one display and bring</span></div>
<div class="line"><a name="l04044"></a><span class="lineno"> 4044</span>&#160;<span class="comment"> * up the display applet</span></div>
<div class="line"><a name="l04045"></a><span class="lineno"> 4045</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l04046"></a><span class="lineno"> 4046</span>&#160; </div>
<div class="line"><a name="l04047"></a><span class="lineno"> 4047</span>&#160; <span class="keywordflow">for</span> (i = 1; i &lt; <a class="code" href="a03257.html#a5f96c779e6c723388217ee64122dbec5">cphysDevInfo</a>; i++) {</div>
<div class="line"><a name="l04048"></a><span class="lineno"> 4048</span>&#160; </div>
<div class="line"><a name="l04049"></a><span class="lineno"> 4049</span>&#160; <span class="keywordflow">if</span> (localDispInfo[i].hDev) {</div>
<div class="line"><a name="l04050"></a><span class="lineno"> 4050</span>&#160; </div>
<div class="line"><a name="l04051"></a><span class="lineno"> 4051</span>&#160; <span class="keywordflow">if</span> (color == 0) {</div>
<div class="line"><a name="l04052"></a><span class="lineno"> 4052</span>&#160; color = <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].<a class="code" href="a02601.html#a19bee6963f84c40169f417b39bc46059">pCurrentDevmode</a>-&gt;dmBitsPerPel;</div>
<div class="line"><a name="l04053"></a><span class="lineno"> 4053</span>&#160; </div>
<div class="line"><a name="l04054"></a><span class="lineno"> 4054</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (color != <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].pCurrentDevmode-&gt;dmBitsPerPel) {</div>
<div class="line"><a name="l04055"></a><span class="lineno"> 4055</span>&#160; </div>
<div class="line"><a name="l04056"></a><span class="lineno"> 4056</span>&#160; <a class="code" href="a00371.html#a162a73e20dfabca084a3ebb4581631a8">UserAssert</a>(color != <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].pCurrentDevmode-&gt;dmBitsPerPel);</div>
<div class="line"><a name="l04057"></a><span class="lineno"> 4057</span>&#160; </div>
<div class="line"><a name="l04058"></a><span class="lineno"> 4058</span>&#160; <a class="code" href="a00665.html#aa8b64103d379d1cc9e91a96db783aa63">UserLogDisplayDriverEvent</a>(MsgInvalidConfiguration);</div>
<div class="line"><a name="l04059"></a><span class="lineno"> 4059</span>&#160; k = 1;</div>
<div class="line"><a name="l04060"></a><span class="lineno"> 4060</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l04061"></a><span class="lineno"> 4061</span>&#160; }</div>
<div class="line"><a name="l04062"></a><span class="lineno"> 4062</span>&#160; }</div>
<div class="line"><a name="l04063"></a><span class="lineno"> 4063</span>&#160; }</div>
<div class="line"><a name="l04064"></a><span class="lineno"> 4064</span>&#160; </div>
<div class="line"><a name="l04065"></a><span class="lineno"> 4065</span>&#160; <span class="keywordflow">for</span> (i = 1; i &lt; mdev-&gt;cmdev; i++) {</div>
<div class="line"><a name="l04066"></a><span class="lineno"> 4066</span>&#160; </div>
<div class="line"><a name="l04067"></a><span class="lineno"> 4067</span>&#160; <span class="keywordflow">if</span> ((mdev-&gt;mdevPos[i].rcPos.left != 0) ||</div>
<div class="line"><a name="l04068"></a><span class="lineno"> 4068</span>&#160; (mdev-&gt;mdevPos[i].rcPos.top != 0) ||</div>
<div class="line"><a name="l04069"></a><span class="lineno"> 4069</span>&#160; (mdev-&gt;mdevPos[i].rcPos.right != mdev-&gt;mdevPos[i-1].rcPos.right) ||</div>
<div class="line"><a name="l04070"></a><span class="lineno"> 4070</span>&#160; (mdev-&gt;mdevPos[i].rcPos.bottom != mdev-&gt;mdevPos[i-1].rcPos.bottom))</div>
<div class="line"><a name="l04071"></a><span class="lineno"> 4071</span>&#160; {</div>
<div class="line"><a name="l04072"></a><span class="lineno"> 4072</span>&#160; <a class="code" href="a00371.html#a162a73e20dfabca084a3ebb4581631a8">UserAssert</a>(FALSE);</div>
<div class="line"><a name="l04073"></a><span class="lineno"> 4073</span>&#160; </div>
<div class="line"><a name="l04074"></a><span class="lineno"> 4074</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l04075"></a><span class="lineno"> 4075</span>&#160;<span class="comment"> * Set k=1 which will cause us to bypass the HMDEV call</span></div>
<div class="line"><a name="l04076"></a><span class="lineno"> 4076</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l04077"></a><span class="lineno"> 4077</span>&#160; <a class="code" href="a00665.html#aa8b64103d379d1cc9e91a96db783aa63">UserLogDisplayDriverEvent</a>(MsgInvalidConfiguration);</div>
<div class="line"><a name="l04078"></a><span class="lineno"> 4078</span>&#160; k = 1;</div>
<div class="line"><a name="l04079"></a><span class="lineno"> 4079</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l04080"></a><span class="lineno"> 4080</span>&#160; }</div>
<div class="line"><a name="l04081"></a><span class="lineno"> 4081</span>&#160; }</div>
<div class="line"><a name="l04082"></a><span class="lineno"> 4082</span>&#160; </div>
<div class="line"><a name="l04083"></a><span class="lineno"> 4083</span>&#160; <span class="keywordflow">if</span> (k &gt; 1) {</div>
<div class="line"><a name="l04084"></a><span class="lineno"> 4084</span>&#160; <a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a81f6c7e5df9c00e3f33e6e1a94ac75fc">hDev</a> = GreCreateHMDEV(mdev,</div>
<div class="line"><a name="l04085"></a><span class="lineno"> 4085</span>&#160; (PDEVICE_LOCK *)&amp;<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a5e0929a8ef013061be966961b2eddbff">pDevLock</a>);</div>
<div class="line"><a name="l04086"></a><span class="lineno"> 4086</span>&#160; }</div>
<div class="line"><a name="l04087"></a><span class="lineno"> 4087</span>&#160; </div>
<div class="line"><a name="l04088"></a><span class="lineno"> 4088</span>&#160; <a class="code" href="a00665.html#a762f2fbf9a0ad4d9a63f7c92adce1297">bMultipleDisplaySystem</a> = TRUE;</div>
<div class="line"><a name="l04089"></a><span class="lineno"> 4089</span>&#160; }</div>
<div class="line"><a name="l04090"></a><span class="lineno"> 4090</span>&#160; </div>
<div class="line"><a name="l04091"></a><span class="lineno"> 4091</span>&#160; <span class="keywordflow">if</span> (k == 0) {</div>
<div class="line"><a name="l04092"></a><span class="lineno"> 4092</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l04093"></a><span class="lineno"> 4093</span>&#160;<span class="comment"> * We did not find any display drivers.</span></div>
<div class="line"><a name="l04094"></a><span class="lineno"> 4094</span>&#160;<span class="comment"> * This is where we bugcheck !</span></div>
<div class="line"><a name="l04095"></a><span class="lineno"> 4095</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l04096"></a><span class="lineno"> 4096</span>&#160; </div>
<div class="line"><a name="l04097"></a><span class="lineno"> 4097</span>&#160; <a class="code" href="a00371.html#a31aafffb49dfe98bdc749c9b35c90162">RIPMSG1</a>(<a class="code" href="a00371.html#a41f433389f20db57f042022a662e96de">RIP_WARNING</a>,</div>
<div class="line"><a name="l04098"></a><span class="lineno"> 4098</span>&#160; <span class="stringliteral">&quot;UserInit: LoadDriver: no loaded display drivers: status=%#lx&quot;</span>,</div>
<div class="line"><a name="l04099"></a><span class="lineno"> 4099</span>&#160; Status);</div>
<div class="line"><a name="l04100"></a><span class="lineno"> 4100</span>&#160; </div>
<div class="line"><a name="l04101"></a><span class="lineno"> 4101</span>&#160; Status = STATUS_NO_SUCH_DEVICE;</div>
<div class="line"><a name="l04102"></a><span class="lineno"> 4102</span>&#160; hardErrorString = L<span class="stringliteral">&quot;PRIMARY_DISPLAY_DRIVER.DLL&quot;</span>;</div>
<div class="line"><a name="l04103"></a><span class="lineno"> 4103</span>&#160; <span class="keywordflow">goto</span> userServerHardError;</div>
<div class="line"><a name="l04104"></a><span class="lineno"> 4104</span>&#160; }</div>
<div class="line"><a name="l04105"></a><span class="lineno"> 4105</span>&#160; </div>
<div class="line"><a name="l04106"></a><span class="lineno"> 4106</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l04107"></a><span class="lineno"> 4107</span>&#160;<span class="comment"> * Properly initialize the primary device.</span></div>
<div class="line"><a name="l04108"></a><span class="lineno"> 4108</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l04109"></a><span class="lineno"> 4109</span>&#160; </div>
<div class="line"><a name="l04110"></a><span class="lineno"> 4110</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l04111"></a><span class="lineno"> 4111</span>&#160;<span class="comment"> * Fill up the devcaps in GDI shared memory</span></div>
<div class="line"><a name="l04112"></a><span class="lineno"> 4112</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l04113"></a><span class="lineno"> 4113</span>&#160; GreUpdateSharedDevCaps(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a81f6c7e5df9c00e3f33e6e1a94ac75fc">hDev</a>);</div>
<div class="line"><a name="l04114"></a><span class="lineno"> 4114</span>&#160; </div>
<div class="line"><a name="l04115"></a><span class="lineno"> 4115</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l04116"></a><span class="lineno"> 4116</span>&#160;<span class="comment"> * Now init the rest of USER</span></div>
<div class="line"><a name="l04117"></a><span class="lineno"> 4117</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l04118"></a><span class="lineno"> 4118</span>&#160; <a class="code" href="a00665.html#ad5ab78c8fa70d3c1a63e786bc439ee73">InitUserScreen</a>();</div>
<div class="line"><a name="l04119"></a><span class="lineno"> 4119</span>&#160; </div>
<div class="line"><a name="l04120"></a><span class="lineno"> 4120</span>&#160; </div>
<div class="line"><a name="l04121"></a><span class="lineno"> 4121</span>&#160; </div>
<div class="line"><a name="l04122"></a><span class="lineno"> 4122</span>&#160; </div>
<div class="line"><a name="l04123"></a><span class="lineno"> 4123</span>&#160; </div>
<div class="line"><a name="l04130"></a><span class="lineno"> 4130</span>&#160;<span class="preprocessor">#if DBG</span></div>
<div class="line"><a name="l04131"></a><span class="lineno"> 4131</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l04132"></a><span class="lineno"> 4132</span>&#160;<span class="comment"> * If no VGA is found print a warning message.</span></div>
<div class="line"><a name="l04133"></a><span class="lineno"> 4133</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l04134"></a><span class="lineno"> 4134</span>&#160;<span class="preprocessor">#if !defined(_MIPS_) &amp;&amp; !defined(_ALPHA_) &amp;&amp; !defined(_PPC_)</span></div>
<div class="line"><a name="l04135"></a><span class="lineno"> 4135</span>&#160; <span class="keywordflow">if</span> (!vgaInstalled) {</div>
<div class="line"><a name="l04136"></a><span class="lineno"> 4136</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#a41f433389f20db57f042022a662e96de">RIP_WARNING</a>, <span class="stringliteral">&quot;UserInit: LoadDriver: No VGA driver found in the system&quot;</span>);</div>
<div class="line"><a name="l04137"></a><span class="lineno"> 4137</span>&#160; }</div>
<div class="line"><a name="l04138"></a><span class="lineno"> 4138</span>&#160;<span class="preprocessor">#endif // _MIPS_ &amp;&amp; _ALPHA_ &amp;&amp; _PPC_</span></div>
<div class="line"><a name="l04139"></a><span class="lineno"> 4139</span>&#160;<span class="preprocessor">#endif // DBG</span></div>
<div class="line"><a name="l04140"></a><span class="lineno"> 4140</span>&#160; </div>
<div class="line"><a name="l04141"></a><span class="lineno"> 4141</span>&#160; </div>
<div class="line"><a name="l04142"></a><span class="lineno"> 4142</span>&#160; Status = STATUS_SUCCESS;</div>
<div class="line"><a name="l04143"></a><span class="lineno"> 4143</span>&#160; </div>
<div class="line"><a name="l04144"></a><span class="lineno"> 4144</span>&#160;userServerHardError:</div>
<div class="line"><a name="l04145"></a><span class="lineno"> 4145</span>&#160; </div>
<div class="line"><a name="l04146"></a><span class="lineno"> 4146</span>&#160; <span class="keywordflow">if</span> (!NT_SUCCESS(Status)) {</div>
<div class="line"><a name="l04147"></a><span class="lineno"> 4147</span>&#160; </div>
<div class="line"><a name="l04148"></a><span class="lineno"> 4148</span>&#160; UNICODE_STRING ErrorString;</div>
<div class="line"><a name="l04149"></a><span class="lineno"> 4149</span>&#160; PUNICODE_STRING ErrorStringPointer = &amp;ErrorString;</div>
<div class="line"><a name="l04150"></a><span class="lineno"> 4150</span>&#160; ULONG ErrorResponse;</div>
<div class="line"><a name="l04151"></a><span class="lineno"> 4151</span>&#160; </div>
<div class="line"><a name="l04152"></a><span class="lineno"> 4152</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDriver: No working display driver found\n&quot;</span>));</div>
<div class="line"><a name="l04153"></a><span class="lineno"> 4153</span>&#160; </div>
<div class="line"><a name="l04154"></a><span class="lineno"> 4154</span>&#160; RtlInitUnicodeString(ErrorStringPointer, hardErrorString);</div>
<div class="line"><a name="l04155"></a><span class="lineno"> 4155</span>&#160; </div>
<div class="line"><a name="l04156"></a><span class="lineno"> 4156</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l04157"></a><span class="lineno"> 4157</span>&#160;<span class="comment"> * need to get image name</span></div>
<div class="line"><a name="l04158"></a><span class="lineno"> 4158</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l04159"></a><span class="lineno"> 4159</span>&#160; ExRaiseHardError((NTSTATUS)STATUS_MISSING_SYSTEMFILE,</div>
<div class="line"><a name="l04160"></a><span class="lineno"> 4160</span>&#160; 1,</div>
<div class="line"><a name="l04161"></a><span class="lineno"> 4161</span>&#160; 0x00000001,</div>
<div class="line"><a name="l04162"></a><span class="lineno"> 4162</span>&#160; (PULONG) (&amp;ErrorStringPointer),</div>
<div class="line"><a name="l04163"></a><span class="lineno"> 4163</span>&#160; OptionOk,</div>
<div class="line"><a name="l04164"></a><span class="lineno"> 4164</span>&#160; &amp;ErrorResponse);</div>
<div class="line"><a name="l04165"></a><span class="lineno"> 4165</span>&#160; </div>
<div class="line"><a name="l04166"></a><span class="lineno"> 4166</span>&#160; }</div>
<div class="line"><a name="l04167"></a><span class="lineno"> 4167</span>&#160; </div>
<div class="line"><a name="l04168"></a><span class="lineno"> 4168</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDriver: Display driver properly installed\n&quot;</span>));</div>
<div class="line"><a name="l04169"></a><span class="lineno"> 4169</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDriver: Finished display driver loading sequence\n&quot;</span>));</div>
<div class="line"><a name="l04170"></a><span class="lineno"> 4170</span>&#160; </div>
<div class="line"><a name="l04171"></a><span class="lineno"> 4171</span>&#160; <span class="keywordflow">return</span> Status;</div>
<div class="line"><a name="l04172"></a><span class="lineno"> 4172</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a00665_source.html#l00742">AttachedSettings</a>, <a class="el" href="a00665_source.html#l00046">bMultipleDisplaySystem</a>, <a class="el" href="a00365_source.html#l01552">tagPHYSICAL_DEV_INFO::cbdevmodeInfo</a>, <a class="el" href="a03257_source.html#l00105">cphysDevInfo</a>, <a class="el" href="a00665_source.html#l00048">DEFAULT_POS_VALUE</a>, <a class="el" href="a00365_source.html#l01553">tagPHYSICAL_DEV_INFO::devmodeInfo</a>, <a class="el" href="a00665_source.html#l00031">DispDriverRegGlobal</a>, <a class="el" href="a00665_source.html#l00032">DispDriverRegHardwareProfile</a>, <a class="el" href="a00665_source.html#l00059">DISPLAY_DEVICE_VGA_COMPATIBLE</a>, <a class="el" href="a00563_source.html#l00175">DWORD</a>, <a class="el" href="a00665_source.html#l00045">gbBaseVideo</a>, <a class="el" href="a03257_source.html#l00125">gpDispInfo</a>, <a class="el" href="a03257_source.html#l00095">gphysDevInfo</a>, <a class="el" href="a00365_source.html#l01576">tagDISPLAYINFO::hDev</a>, <a class="el" href="a00665_source.html#l02855">InitUserScreen()</a>, <a class="el" href="a00365_source.html#l01551">tagPHYSICAL_DEV_INFO::pCurrentDevmode</a>, <a class="el" href="a00365_source.html#l01578">tagDISPLAYINFO::pDevInfo</a>, <a class="el" href="a00365_source.html#l01577">tagDISPLAYINFO::pDevLock</a>, <a class="el" href="a00665_source.html#l01977">ProbeAndCaptureDevmode()</a>, <a class="el" href="a00020_source.html#l00059">rcScreen</a>, <a class="el" href="a00365_source.html#l01570">tagDISPLAYINFO::rcScreen</a>, <a class="el" href="a00371_source.html#l00028">RIP_ERROR</a>, <a class="el" href="a00371_source.html#l00029">RIP_WARNING</a>, <a class="el" href="a00371_source.html#l00131">RIPMSG0</a>, <a class="el" href="a00371_source.html#l00132">RIPMSG1</a>, <a class="el" href="a00365_source.html#l01550">tagPHYSICAL_DEV_INFO::stateFlags</a>, <a class="el" href="a03257_source.html#l00322">strDisplayDriver</a>, <a class="el" href="a00950_source.html#l00117">UserAssert</a>, <a class="el" href="a00665_source.html#l01721">UserFreeDevice()</a>, <a class="el" href="a00665_source.html#l01451">UserGetDeviceFromName()</a>, <a class="el" href="a00665_source.html#l00799">UserGetDisplayDriverParameters()</a>, <a class="el" href="a00665_source.html#l00249">UserGetRegistryHandleFromDeviceMap()</a>, <a class="el" href="a00665_source.html#l01326">UserLoadDisplayDriver()</a>, <a class="el" href="a00665_source.html#l00643">UserLogDisplayDriverEvent()</a> , 以及 <a class="el" href="a00665_source.html#l00173">UserSaveCurrentMode()</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="a03665_source.html#l01691">UserInitialize()</a>.</p>
</div>
</div>
<a id="ad5ab78c8fa70d3c1a63e786bc439ee73"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad5ab78c8fa70d3c1a63e786bc439ee73">&#9670;&nbsp;</a></span>InitUserScreen()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">VOID InitUserScreen </td>
<td>(</td>
<td class="paramtype">VOID&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l02855">2855</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>&#160;{</div>
<div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>&#160; RECT rc;</div>
<div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>&#160; </div>
<div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: Initialize Screen\n&quot;</span>));</div>
<div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>&#160; </div>
<div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>&#160;<span class="comment"> * Create screen and memory dcs.</span></div>
<div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>&#160; <a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a> = GreCreateDisplayDC(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a81f6c7e5df9c00e3f33e6e1a94ac75fc">hDev</a>, DCTYPE_DIRECT, FALSE);</div>
<div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>&#160; GreSelectFont(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>, GreGetStockObject(SYSTEM_FONT));</div>
<div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>&#160; GreSetDCOwner(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>, OBJECT_OWNER_PUBLIC);</div>
<div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>&#160; </div>
<div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>&#160; <a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a81fb25d8b2c4e7012c2225397f6fe699">hdcBits</a> = GreCreateCompatibleDC(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>);</div>
<div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>&#160; GreSelectFont(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a81fb25d8b2c4e7012c2225397f6fe699">hdcBits</a>, GreGetStockObject(SYSTEM_FONT));</div>
<div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>&#160; GreSetDCOwner(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a81fb25d8b2c4e7012c2225397f6fe699">hdcBits</a>, OBJECT_OWNER_PUBLIC);</div>
<div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>&#160; </div>
<div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>&#160; <a class="code" href="a03257.html#a1a36496b13c02b06ee64e9c01c029477">ghdcMem</a> = GreCreateCompatibleDC(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>);</div>
<div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>&#160; GreSetDCOwner(<a class="code" href="a03257.html#a1a36496b13c02b06ee64e9c01c029477">ghdcMem</a>, OBJECT_OWNER_PUBLIC);</div>
<div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>&#160; </div>
<div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>&#160; <a class="code" href="a03257.html#aa88de52d1162c4701fb38718c5b75b24">ghdcMem2</a> = GreCreateCompatibleDC(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>);</div>
<div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>&#160; GreSetDCOwner(<a class="code" href="a03257.html#aa88de52d1162c4701fb38718c5b75b24">ghdcMem2</a>, OBJECT_OWNER_PUBLIC);</div>
<div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>&#160; </div>
<div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>&#160;<span class="comment"> * We need this when we initialize the first client; winlogon</span></div>
<div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>&#160;<span class="comment"> * which is before InitWinStaDevices is called</span></div>
<div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>&#160; <a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#ad3e0b5376b5114f4269df20805a3a85e">cxPixelsPerInch</a> = GreGetDeviceCaps(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>, LOGPIXELSX);</div>
<div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>&#160; <a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a2458aa3b22e3415ba05fc9fba634628d">cyPixelsPerInch</a> = GreGetDeviceCaps(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>, LOGPIXELSY);</div>
<div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>&#160; <a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a3b0790cb5dc5ebed344f79adcd7d8fa0">cPlanes</a> = GreGetDeviceCaps(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>, PLANES);</div>
<div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>&#160; <a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a0a83e72210bd4213414535c6d7351d6f">cBitsPixel</a> = GreGetDeviceCaps(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>, BITSPIXEL);</div>
<div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>&#160; </div>
<div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>&#160; SYSMET(CXSCREEN) = GreGetDeviceCaps(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>, HORZRES);</div>
<div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>&#160; SYSMET(CYSCREEN) = GreGetDeviceCaps(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>, VERTRES);</div>
<div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>&#160; </div>
<div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>&#160; <a class="code" href="a00935.html#a479bbe69c871894f6ca23dfa237481ad">SetRect</a>(&amp;<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a263f5b35c44d9f9ae5c74acae8037644">rcScreen</a>,</div>
<div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>&#160; 0,</div>
<div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>&#160; 0,</div>
<div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>&#160; GreGetDeviceCaps(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>, DESKTOPHORZRES),</div>
<div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>&#160; GreGetDeviceCaps(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>, DESKTOPVERTRES));</div>
<div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>&#160; </div>
<div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>&#160; <a class="code" href="a00935.html#a479bbe69c871894f6ca23dfa237481ad">SetRect</a>(&amp;<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a7ae1e4da76ad52e90f87fe39f43b2c4f">rcPrimaryScreen</a>,</div>
<div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>&#160; 0,</div>
<div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>&#160; 0,</div>
<div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>&#160; SYSMET(CXSCREEN),</div>
<div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>&#160; SYSMET(CYSCREEN));</div>
<div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>&#160; </div>
<div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>&#160; <a class="code" href="a00935.html#a31ccccdb469eefbb55d18b71a26af0da">CopyRect</a>(&amp;(<a class="code" href="a00020.html#ad760da1dd81d9e84dee607d18edfde39">gpsi</a>-&gt;<a class="code" href="a02513.html#ad47c3c3836f1cb6cfb9ee4dd5d344496">rcWork</a>), &amp;<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a263f5b35c44d9f9ae5c74acae8037644">rcScreen</a>);</div>
<div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>&#160; </div>
<div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>&#160;<span class="comment"> * Do some initialization so we create the system colors.</span></div>
<div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>&#160; <a class="code" href="a00821.html#a71ab7da1e1b58e117d8fe2bcca8fcdb0">FastOpenProfileUserMapping</a>();</div>
<div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>&#160; </div>
<div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>&#160;<span class="comment"> * Get the window sizing border width from WIN.INI.</span></div>
<div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>&#160; <a class="code" href="a00020.html#ad760da1dd81d9e84dee607d18edfde39">gpsi</a>-&gt;<a class="code" href="a02513.html#ab4a2b5b4deef4d2014cbe6c3bb434b41">gclBorder</a> = <a class="code" href="a00821.html#af5e5b32f8171b8bb0dc4c27012b77918">FastGetProfileIntFromID</a>(PMAP_DESKTOP, STR_BORDERWIDTH, 3);</div>
<div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00020.html#ad760da1dd81d9e84dee607d18edfde39">gpsi</a>-&gt;<a class="code" href="a02513.html#ab4a2b5b4deef4d2014cbe6c3bb434b41">gclBorder</a> &lt; 1)</div>
<div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>&#160; <a class="code" href="a00020.html#ad760da1dd81d9e84dee607d18edfde39">gpsi</a>-&gt;<a class="code" href="a02513.html#ab4a2b5b4deef4d2014cbe6c3bb434b41">gclBorder</a> = 1;</div>
<div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="a00020.html#ad760da1dd81d9e84dee607d18edfde39">gpsi</a>-&gt;<a class="code" href="a02513.html#ab4a2b5b4deef4d2014cbe6c3bb434b41">gclBorder</a> &gt; 50)</div>
<div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>&#160; <a class="code" href="a00020.html#ad760da1dd81d9e84dee607d18edfde39">gpsi</a>-&gt;<a class="code" href="a02513.html#ab4a2b5b4deef4d2014cbe6c3bb434b41">gclBorder</a> = 50;</div>
<div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>&#160; </div>
<div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>&#160; <a class="code" href="a00719.html#a333336c1f5ede3d334818ee0b68bddca">xxxLW_DCInit</a>();</div>
<div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>&#160; </div>
<div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>&#160; <a class="code" href="a00821.html#aa99363e718e5d1c8d2d5232e51fe2716">FastCloseProfileUserMapping</a>();</div>
<div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>&#160; </div>
<div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>&#160;<span class="comment"> * Set up a desktop info structure that is visible in all</span></div>
<div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>&#160;<span class="comment"> * clients.</span></div>
<div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>&#160; <a class="code" href="a03257.html#a49d76150714c65558a2481eef6093659">gpdiStatic</a> = <a class="code" href="a00680.html#a3d55823092d5efdce994868cd5efa7d8">SharedAlloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="a02609.html">DESKTOPINFO</a>));</div>
<div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>&#160; RtlZeroMemory(<a class="code" href="a03257.html#a49d76150714c65558a2481eef6093659">gpdiStatic</a>, <span class="keyword">sizeof</span>(*<a class="code" href="a03257.html#a49d76150714c65558a2481eef6093659">gpdiStatic</a>));</div>
<div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>&#160; </div>
<div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>&#160;<span class="comment"> * Paint the screen background.</span></div>
<div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>&#160; <a class="code" href="a00935.html#a479bbe69c871894f6ca23dfa237481ad">SetRect</a>(&amp;rc, 0, 0, SYSMET(CXSCREEN), SYSMET(CYSCREEN));</div>
<div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>&#160; <a class="code" href="a03212.html#a49402fd1bea89e835e5bc8bc96de744f">FillRect</a>(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>, &amp;rc, SYSHBR(<a class="code" href="a02801.html">DESKTOP</a>));</div>
<div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a00365_source.html#l01583">tagDISPLAYINFO::cBitsPixel</a>, <a class="el" href="a00935_source.html#l00391">CopyRect()</a>, <a class="el" href="a00365_source.html#l01582">tagDISPLAYINFO::cPlanes</a>, <a class="el" href="a00365_source.html#l01580">tagDISPLAYINFO::cxPixelsPerInch</a>, <a class="el" href="a00365_source.html#l01581">tagDISPLAYINFO::cyPixelsPerInch</a>, <a class="el" href="a00821_source.html#l00224">FastCloseProfileUserMapping()</a>, <a class="el" href="a00821_source.html#l00631">FastGetProfileIntFromID()</a>, <a class="el" href="a00821_source.html#l00160">FastOpenProfileUserMapping()</a>, <a class="el" href="a03212_source.html#l00029">FillRect()</a>, <a class="el" href="a00365_source.html#l00982">tagSERVERINFO::gclBorder</a>, <a class="el" href="a03257_source.html#l00399">ghdcMem</a>, <a class="el" href="a03257_source.html#l00400">ghdcMem2</a>, <a class="el" href="a03257_source.html#l00125">gpDispInfo</a>, <a class="el" href="a03257_source.html#l00089">gpdiStatic</a>, <a class="el" href="a00020_source.html#l00039">gpsi</a>, <a class="el" href="a00365_source.html#l01568">tagDISPLAYINFO::hdcBits</a>, <a class="el" href="a00365_source.html#l01566">tagDISPLAYINFO::hdcScreen</a>, <a class="el" href="a00365_source.html#l01576">tagDISPLAYINFO::hDev</a>, <a class="el" href="a00365_source.html#l01571">tagDISPLAYINFO::rcPrimaryScreen</a>, <a class="el" href="a00365_source.html#l01570">tagDISPLAYINFO::rcScreen</a>, <a class="el" href="a00365_source.html#l01007">tagSERVERINFO::rcWork</a>, <a class="el" href="a00935_source.html#l00021">SetRect()</a>, <a class="el" href="a00680_source.html#l00305">SharedAlloc()</a> , 以及 <a class="el" href="a00719_source.html#l00705">xxxLW_DCInit()</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l02945">InitLoadDriver()</a>.</p>
</div>
</div>
<a id="a3affe9dfb55da29e7cb9e961db8d3f9a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3affe9dfb55da29e7cb9e961db8d3f9a">&#9670;&nbsp;</a></span>NtUserEnumDisplaySettings()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">NTSTATUS NtUserEnumDisplaySettings </td>
<td>(</td>
<td class="paramtype">IN PUNICODE_STRING&#160;</td>
<td class="paramname"><em>pstrDeviceName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">IN <a class="el" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a>&#160;</td>
<td class="paramname"><em>iModeNum</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">OUT LPDEVMODEW&#160;</td>
<td class="paramname"><em>lpDevMode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a>&#160;</td>
<td class="paramname"><em>dwFalgs</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l04187">4187</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l04192"></a><span class="lineno"> 4192</span>&#160;{</div>
<div class="line"><a name="l04193"></a><span class="lineno"> 4193</span>&#160; NTSTATUS retval = STATUS_INVALID_PARAMETER_1;</div>
<div class="line"><a name="l04194"></a><span class="lineno"> 4194</span>&#160; </div>
<div class="line"><a name="l04195"></a><span class="lineno"> 4195</span>&#160; UNICODE_STRING strDevice;</div>
<div class="line"><a name="l04196"></a><span class="lineno"> 4196</span>&#160; UNICODE_STRING us;</div>
<div class="line"><a name="l04197"></a><span class="lineno"> 4197</span>&#160; <a class="code" href="a02601.html">PPHYSICAL_DEV_INFO</a> physinfo = NULL;</div>
<div class="line"><a name="l04198"></a><span class="lineno"> 4198</span>&#160; USHORT DriverExtraSize;</div>
<div class="line"><a name="l04199"></a><span class="lineno"> 4199</span>&#160; </div>
<div class="line"><a name="l04200"></a><span class="lineno"> 4200</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l04201"></a><span class="lineno"> 4201</span>&#160; <span class="comment">// Probe the DeviceName and the DEVMODE.</span></div>
<div class="line"><a name="l04202"></a><span class="lineno"> 4202</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l04203"></a><span class="lineno"> 4203</span>&#160; </div>
<div class="line"><a name="l04204"></a><span class="lineno"> 4204</span>&#160; <a class="code" href="a00899.html#ae451a2dc8791c420d7c956a63adc33ba">EnterCrit</a>();</div>
<div class="line"><a name="l04205"></a><span class="lineno"> 4205</span>&#160; </div>
<div class="line"><a name="l04206"></a><span class="lineno"> 4206</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l04207"></a><span class="lineno"> 4207</span>&#160; </div>
<div class="line"><a name="l04208"></a><span class="lineno"> 4208</span>&#160; ProbeForRead(lpDevMode, <span class="keyword">sizeof</span>(DEVMODEW), <span class="keyword">sizeof</span>(USHORT));</div>
<div class="line"><a name="l04209"></a><span class="lineno"> 4209</span>&#160; </div>
<div class="line"><a name="l04210"></a><span class="lineno"> 4210</span>&#160; DriverExtraSize = lpDevMode-&gt;dmDriverExtra;</div>
<div class="line"><a name="l04211"></a><span class="lineno"> 4211</span>&#160; </div>
<div class="line"><a name="l04212"></a><span class="lineno"> 4212</span>&#160; ProbeForWrite(lpDevMode,</div>
<div class="line"><a name="l04213"></a><span class="lineno"> 4213</span>&#160; <span class="keyword">sizeof</span>(DEVMODEW) + DriverExtraSize,</div>
<div class="line"><a name="l04214"></a><span class="lineno"> 4214</span>&#160; <span class="keyword">sizeof</span>(USHORT));</div>
<div class="line"><a name="l04215"></a><span class="lineno"> 4215</span>&#160; </div>
<div class="line"><a name="l04216"></a><span class="lineno"> 4216</span>&#160; </div>
<div class="line"><a name="l04217"></a><span class="lineno"> 4217</span>&#160; <span class="keywordflow">if</span> (lpDevMode-&gt;dmSize != <span class="keyword">sizeof</span>(DEVMODEW))</div>
<div class="line"><a name="l04218"></a><span class="lineno"> 4218</span>&#160; {</div>
<div class="line"><a name="l04219"></a><span class="lineno"> 4219</span>&#160; <a class="code" href="a00899.html#ac2181d07596893ed44d18aa267ce4d23">LeaveCrit</a>();</div>
<div class="line"><a name="l04220"></a><span class="lineno"> 4220</span>&#160; <span class="keywordflow">return</span> STATUS_BUFFER_TOO_SMALL;</div>
<div class="line"><a name="l04221"></a><span class="lineno"> 4221</span>&#160; }</div>
<div class="line"><a name="l04222"></a><span class="lineno"> 4222</span>&#160; </div>
<div class="line"><a name="l04223"></a><span class="lineno"> 4223</span>&#160; } except (EXCEPTION_EXECUTE_HANDLER) {</div>
<div class="line"><a name="l04224"></a><span class="lineno"> 4224</span>&#160; <a class="code" href="a00899.html#ac2181d07596893ed44d18aa267ce4d23">LeaveCrit</a>();</div>
<div class="line"><a name="l04225"></a><span class="lineno"> 4225</span>&#160; <span class="keywordflow">return</span> GetExceptionCode();</div>
<div class="line"><a name="l04226"></a><span class="lineno"> 4226</span>&#160; }</div>
<div class="line"><a name="l04227"></a><span class="lineno"> 4227</span>&#160; </div>
<div class="line"><a name="l04228"></a><span class="lineno"> 4228</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00665.html#ad1a9b877f3705368d000061536e1b1fb">ProbeAndCaptureDeviceName</a>(&amp;strDevice, pstrDeviceName)) {</div>
<div class="line"><a name="l04229"></a><span class="lineno"> 4229</span>&#160; physinfo = <a class="code" href="a00665.html#a291aca25f546e197608f39e4887001a9">UserGetDeviceFromName</a>(&amp;strDevice, USER_DEVICE_NOTOWNED);</div>
<div class="line"><a name="l04230"></a><span class="lineno"> 4230</span>&#160; </div>
<div class="line"><a name="l04231"></a><span class="lineno"> 4231</span>&#160; <span class="keywordflow">if</span> (strDevice.Buffer)</div>
<div class="line"><a name="l04232"></a><span class="lineno"> 4232</span>&#160; UserFreePool(strDevice.Buffer);</div>
<div class="line"><a name="l04233"></a><span class="lineno"> 4233</span>&#160; }</div>
<div class="line"><a name="l04234"></a><span class="lineno"> 4234</span>&#160; </div>
<div class="line"><a name="l04235"></a><span class="lineno"> 4235</span>&#160; <span class="keywordflow">if</span> (physinfo) {</div>
<div class="line"><a name="l04236"></a><span class="lineno"> 4236</span>&#160; </div>
<div class="line"><a name="l04237"></a><span class="lineno"> 4237</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l04238"></a><span class="lineno"> 4238</span>&#160; <span class="comment">// -2 means we want the registry DEVMODE to do matching on the</span></div>
<div class="line"><a name="l04239"></a><span class="lineno"> 4239</span>&#160; <span class="comment">// client side.</span></div>
<div class="line"><a name="l04240"></a><span class="lineno"> 4240</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l04241"></a><span class="lineno"> 4241</span>&#160; </div>
<div class="line"><a name="l04242"></a><span class="lineno"> 4242</span>&#160; <span class="keywordflow">if</span> (iModeNum == (<a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a>) -2) {</div>
<div class="line"><a name="l04243"></a><span class="lineno"> 4243</span>&#160; </div>
<div class="line"><a name="l04244"></a><span class="lineno"> 4244</span>&#160; PDEVMODEW pdevmode;</div>
<div class="line"><a name="l04245"></a><span class="lineno"> 4245</span>&#160; </div>
<div class="line"><a name="l04246"></a><span class="lineno"> 4246</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;NtUserEnumDisp: -2 mode\n&quot;</span>));</div>
<div class="line"><a name="l04247"></a><span class="lineno"> 4247</span>&#160; </div>
<div class="line"><a name="l04248"></a><span class="lineno"> 4248</span>&#160; <span class="keywordflow">if</span> (pdevmode = UserAllocPool(<span class="keyword">sizeof</span>(DEVMODEW) + MAXUSHORT,</div>
<div class="line"><a name="l04249"></a><span class="lineno"> 4249</span>&#160; TAG_DEVMODE)) {</div>
<div class="line"><a name="l04250"></a><span class="lineno"> 4250</span>&#160; </div>
<div class="line"><a name="l04251"></a><span class="lineno"> 4251</span>&#160; RtlZeroMemory(pdevmode, <span class="keyword">sizeof</span>(DEVMODEW));</div>
<div class="line"><a name="l04252"></a><span class="lineno"> 4252</span>&#160; pdevmode-&gt;dmSize = 0xDDDD;</div>
<div class="line"><a name="l04253"></a><span class="lineno"> 4253</span>&#160; pdevmode-&gt;dmDriverExtra = MAXUSHORT;</div>
<div class="line"><a name="l04254"></a><span class="lineno"> 4254</span>&#160; </div>
<div class="line"><a name="l04255"></a><span class="lineno"> 4255</span>&#160; RtlInitUnicodeString(&amp;us, &amp;(physinfo-&gt;<a class="code" href="a02601.html#a19e507bdf81c67304d8ba81c600ac0eb">szNtDeviceName</a>[0]));</div>
<div class="line"><a name="l04256"></a><span class="lineno"> 4256</span>&#160; </div>
<div class="line"><a name="l04257"></a><span class="lineno"> 4257</span>&#160; retval = <a class="code" href="a00665.html#a1496fe4e3afa850f6bd625b0c3542b78">UserGetDisplayDriverParameters</a>(&amp;us,</div>
<div class="line"><a name="l04258"></a><span class="lineno"> 4258</span>&#160; pdevmode,</div>
<div class="line"><a name="l04259"></a><span class="lineno"> 4259</span>&#160; FALSE);</div>
<div class="line"><a name="l04260"></a><span class="lineno"> 4260</span>&#160; </div>
<div class="line"><a name="l04261"></a><span class="lineno"> 4261</span>&#160; <span class="keywordflow">if</span> (NT_SUCCESS(retval)) {</div>
<div class="line"><a name="l04262"></a><span class="lineno"> 4262</span>&#160; </div>
<div class="line"><a name="l04263"></a><span class="lineno"> 4263</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l04264"></a><span class="lineno"> 4264</span>&#160; </div>
<div class="line"><a name="l04265"></a><span class="lineno"> 4265</span>&#160; DriverExtraSize = min(DriverExtraSize,</div>
<div class="line"><a name="l04266"></a><span class="lineno"> 4266</span>&#160; pdevmode-&gt;dmDriverExtra);</div>
<div class="line"><a name="l04267"></a><span class="lineno"> 4267</span>&#160; </div>
<div class="line"><a name="l04268"></a><span class="lineno"> 4268</span>&#160; RtlCopyMemory(lpDevMode + 1,</div>
<div class="line"><a name="l04269"></a><span class="lineno"> 4269</span>&#160; pdevmode + 1,</div>
<div class="line"><a name="l04270"></a><span class="lineno"> 4270</span>&#160; DriverExtraSize);</div>
<div class="line"><a name="l04271"></a><span class="lineno"> 4271</span>&#160; </div>
<div class="line"><a name="l04272"></a><span class="lineno"> 4272</span>&#160; RtlCopyMemory(lpDevMode,</div>
<div class="line"><a name="l04273"></a><span class="lineno"> 4273</span>&#160; pdevmode,</div>
<div class="line"><a name="l04274"></a><span class="lineno"> 4274</span>&#160; <span class="keyword">sizeof</span>(DEVMODEW));</div>
<div class="line"><a name="l04275"></a><span class="lineno"> 4275</span>&#160; </div>
<div class="line"><a name="l04276"></a><span class="lineno"> 4276</span>&#160; } except(EXCEPTION_EXECUTE_HANDLER) {</div>
<div class="line"><a name="l04277"></a><span class="lineno"> 4277</span>&#160; </div>
<div class="line"><a name="l04278"></a><span class="lineno"> 4278</span>&#160; retval = STATUS_INVALID_PARAMETER_3;</div>
<div class="line"><a name="l04279"></a><span class="lineno"> 4279</span>&#160; }</div>
<div class="line"><a name="l04280"></a><span class="lineno"> 4280</span>&#160; }</div>
<div class="line"><a name="l04281"></a><span class="lineno"> 4281</span>&#160; </div>
<div class="line"><a name="l04282"></a><span class="lineno"> 4282</span>&#160; UserFreePool(pdevmode);</div>
<div class="line"><a name="l04283"></a><span class="lineno"> 4283</span>&#160; }</div>
<div class="line"><a name="l04284"></a><span class="lineno"> 4284</span>&#160; </div>
<div class="line"><a name="l04285"></a><span class="lineno"> 4285</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l04286"></a><span class="lineno"> 4286</span>&#160; <span class="comment">// -1 means returns the current device mode.</span></div>
<div class="line"><a name="l04287"></a><span class="lineno"> 4287</span>&#160; <span class="comment">// We store the full DEVMODE in the</span></div>
<div class="line"><a name="l04288"></a><span class="lineno"> 4288</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l04289"></a><span class="lineno"> 4289</span>&#160; </div>
<div class="line"><a name="l04290"></a><span class="lineno"> 4290</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (iModeNum == (<a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a>) -1) {</div>
<div class="line"><a name="l04291"></a><span class="lineno"> 4291</span>&#160; </div>
<div class="line"><a name="l04292"></a><span class="lineno"> 4292</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;NtUserEnumDisp: -1 mode\n&quot;</span>));</div>
<div class="line"><a name="l04293"></a><span class="lineno"> 4293</span>&#160; </div>
<div class="line"><a name="l04294"></a><span class="lineno"> 4294</span>&#160; <span class="keywordflow">if</span> (physinfo-&gt;<a class="code" href="a02601.html#a19bee6963f84c40169f417b39bc46059">pCurrentDevmode</a> != NULL) {</div>
<div class="line"><a name="l04295"></a><span class="lineno"> 4295</span>&#160; </div>
<div class="line"><a name="l04296"></a><span class="lineno"> 4296</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l04297"></a><span class="lineno"> 4297</span>&#160; </div>
<div class="line"><a name="l04298"></a><span class="lineno"> 4298</span>&#160; DriverExtraSize = min(DriverExtraSize,</div>
<div class="line"><a name="l04299"></a><span class="lineno"> 4299</span>&#160; physinfo-&gt;<a class="code" href="a02601.html#a19bee6963f84c40169f417b39bc46059">pCurrentDevmode</a>-&gt;dmDriverExtra);</div>
<div class="line"><a name="l04300"></a><span class="lineno"> 4300</span>&#160; </div>
<div class="line"><a name="l04301"></a><span class="lineno"> 4301</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l04302"></a><span class="lineno"> 4302</span>&#160; <span class="comment">// We know the DEVMODE we called the driver with is of</span></div>
<div class="line"><a name="l04303"></a><span class="lineno"> 4303</span>&#160; <span class="comment">// size sizeof(DEVMODEW)</span></div>
<div class="line"><a name="l04304"></a><span class="lineno"> 4304</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l04305"></a><span class="lineno"> 4305</span>&#160; </div>
<div class="line"><a name="l04306"></a><span class="lineno"> 4306</span>&#160; RtlCopyMemory(lpDevMode + 1,</div>
<div class="line"><a name="l04307"></a><span class="lineno"> 4307</span>&#160; physinfo-&gt;<a class="code" href="a02601.html#a19bee6963f84c40169f417b39bc46059">pCurrentDevmode</a> + 1,</div>
<div class="line"><a name="l04308"></a><span class="lineno"> 4308</span>&#160; DriverExtraSize);</div>
<div class="line"><a name="l04309"></a><span class="lineno"> 4309</span>&#160; </div>
<div class="line"><a name="l04310"></a><span class="lineno"> 4310</span>&#160; RtlCopyMemory(lpDevMode,</div>
<div class="line"><a name="l04311"></a><span class="lineno"> 4311</span>&#160; physinfo-&gt;<a class="code" href="a02601.html#a19bee6963f84c40169f417b39bc46059">pCurrentDevmode</a>,</div>
<div class="line"><a name="l04312"></a><span class="lineno"> 4312</span>&#160; <span class="keyword">sizeof</span>(DEVMODEW));</div>
<div class="line"><a name="l04313"></a><span class="lineno"> 4313</span>&#160; </div>
<div class="line"><a name="l04314"></a><span class="lineno"> 4314</span>&#160; retval = STATUS_SUCCESS;</div>
<div class="line"><a name="l04315"></a><span class="lineno"> 4315</span>&#160; </div>
<div class="line"><a name="l04316"></a><span class="lineno"> 4316</span>&#160; } except(EXCEPTION_EXECUTE_HANDLER) {</div>
<div class="line"><a name="l04317"></a><span class="lineno"> 4317</span>&#160; </div>
<div class="line"><a name="l04318"></a><span class="lineno"> 4318</span>&#160; retval = STATUS_INVALID_PARAMETER_3;</div>
<div class="line"><a name="l04319"></a><span class="lineno"> 4319</span>&#160; }</div>
<div class="line"><a name="l04320"></a><span class="lineno"> 4320</span>&#160; </div>
<div class="line"><a name="l04321"></a><span class="lineno"> 4321</span>&#160; }</div>
<div class="line"><a name="l04322"></a><span class="lineno"> 4322</span>&#160; </div>
<div class="line"><a name="l04323"></a><span class="lineno"> 4323</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l04324"></a><span class="lineno"> 4324</span>&#160; </div>
<div class="line"><a name="l04325"></a><span class="lineno"> 4325</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l04326"></a><span class="lineno"> 4326</span>&#160;<span class="comment"> * PERF - Can we use something else to synchronize access to the</span></div>
<div class="line"><a name="l04327"></a><span class="lineno"> 4327</span>&#160;<span class="comment"> * list of modes ?</span></div>
<div class="line"><a name="l04328"></a><span class="lineno"> 4328</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l04329"></a><span class="lineno"> 4329</span>&#160; </div>
<div class="line"><a name="l04330"></a><span class="lineno"> 4330</span>&#160; <a class="code" href="a00665.html#af58d084fab4188005b01c976f76bbefa">UserBuildDevmodeList</a>(physinfo);</div>
<div class="line"><a name="l04331"></a><span class="lineno"> 4331</span>&#160; </div>
<div class="line"><a name="l04332"></a><span class="lineno"> 4332</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l04333"></a><span class="lineno"> 4333</span>&#160; <span class="comment">// now return the information</span></div>
<div class="line"><a name="l04334"></a><span class="lineno"> 4334</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l04335"></a><span class="lineno"> 4335</span>&#160; </div>
<div class="line"><a name="l04336"></a><span class="lineno"> 4336</span>&#160; <span class="keywordflow">if</span> ( (physinfo-&gt;<a class="code" href="a02601.html#a11272e040ff3989da159f50e88b7b8c6">cbdevmodeInfo</a> == 0) ||</div>
<div class="line"><a name="l04337"></a><span class="lineno"> 4337</span>&#160; (physinfo-&gt;<a class="code" href="a02601.html#a1fe37d9234f46b11eab06dbfbafab7e9">devmodeInfo</a> == NULL) ) {</div>
<div class="line"><a name="l04338"></a><span class="lineno"> 4338</span>&#160; </div>
<div class="line"><a name="l04339"></a><span class="lineno"> 4339</span>&#160; <a class="code" href="a00371.html#ae61d954062a9ece52e350e54cad9a23d">RIPERR0</a>(ERROR_INVALID_PARAMETER, <a class="code" href="a00371.html#a41f433389f20db57f042022a662e96de">RIP_WARNING</a>, <span class="stringliteral">&quot;EnumDisplaySettings physinfo is inconsistent \n&quot;</span>);</div>
<div class="line"><a name="l04340"></a><span class="lineno"> 4340</span>&#160; retval = STATUS_UNSUCCESSFUL;</div>
<div class="line"><a name="l04341"></a><span class="lineno"> 4341</span>&#160; </div>
<div class="line"><a name="l04342"></a><span class="lineno"> 4342</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l04343"></a><span class="lineno"> 4343</span>&#160; </div>
<div class="line"><a name="l04344"></a><span class="lineno"> 4344</span>&#160; <a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a> dwTotalSize = 0;</div>
<div class="line"><a name="l04345"></a><span class="lineno"> 4345</span>&#160; LPDEVMODEW lpdm = physinfo-&gt;<a class="code" href="a02601.html#a1fe37d9234f46b11eab06dbfbafab7e9">devmodeInfo</a>;</div>
<div class="line"><a name="l04346"></a><span class="lineno"> 4346</span>&#160; <a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a> i;</div>
<div class="line"><a name="l04347"></a><span class="lineno"> 4347</span>&#160; </div>
<div class="line"><a name="l04348"></a><span class="lineno"> 4348</span>&#160; retval = STATUS_INVALID_PARAMETER_2;</div>
<div class="line"><a name="l04349"></a><span class="lineno"> 4349</span>&#160; </div>
<div class="line"><a name="l04350"></a><span class="lineno"> 4350</span>&#160; <span class="keywordflow">for</span> (i = 0; dwTotalSize &lt; physinfo-&gt;<a class="code" href="a02601.html#a11272e040ff3989da159f50e88b7b8c6">cbdevmodeInfo</a>; i++) {</div>
<div class="line"><a name="l04351"></a><span class="lineno"> 4351</span>&#160; </div>
<div class="line"><a name="l04352"></a><span class="lineno"> 4352</span>&#160; <span class="keywordflow">if</span> (i == iModeNum) {</div>
<div class="line"><a name="l04353"></a><span class="lineno"> 4353</span>&#160; </div>
<div class="line"><a name="l04354"></a><span class="lineno"> 4354</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l04355"></a><span class="lineno"> 4355</span>&#160; </div>
<div class="line"><a name="l04356"></a><span class="lineno"> 4356</span>&#160; DriverExtraSize = min(DriverExtraSize,</div>
<div class="line"><a name="l04357"></a><span class="lineno"> 4357</span>&#160; lpdm-&gt;dmDriverExtra);</div>
<div class="line"><a name="l04358"></a><span class="lineno"> 4358</span>&#160; </div>
<div class="line"><a name="l04359"></a><span class="lineno"> 4359</span>&#160; RtlZeroMemory(lpDevMode, <span class="keyword">sizeof</span>(DEVMODEW));</div>
<div class="line"><a name="l04360"></a><span class="lineno"> 4360</span>&#160; </div>
<div class="line"><a name="l04361"></a><span class="lineno"> 4361</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l04362"></a><span class="lineno"> 4362</span>&#160; <span class="comment">// Check the size since the devmode returned</span></div>
<div class="line"><a name="l04363"></a><span class="lineno"> 4363</span>&#160; <span class="comment">// by the driver can be smaller than the current</span></div>
<div class="line"><a name="l04364"></a><span class="lineno"> 4364</span>&#160; <span class="comment">// size.</span></div>
<div class="line"><a name="l04365"></a><span class="lineno"> 4365</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l04366"></a><span class="lineno"> 4366</span>&#160; </div>
<div class="line"><a name="l04367"></a><span class="lineno"> 4367</span>&#160; RtlCopyMemory(lpDevMode + 1,</div>
<div class="line"><a name="l04368"></a><span class="lineno"> 4368</span>&#160; ((PUCHAR)lpdm) + lpdm-&gt;dmSize,</div>
<div class="line"><a name="l04369"></a><span class="lineno"> 4369</span>&#160; DriverExtraSize);</div>
<div class="line"><a name="l04370"></a><span class="lineno"> 4370</span>&#160; </div>
<div class="line"><a name="l04371"></a><span class="lineno"> 4371</span>&#160; RtlCopyMemory(lpDevMode,</div>
<div class="line"><a name="l04372"></a><span class="lineno"> 4372</span>&#160; lpdm,</div>
<div class="line"><a name="l04373"></a><span class="lineno"> 4373</span>&#160; min(<span class="keyword">sizeof</span>(DEVMODEW), lpdm-&gt;dmSize));</div>
<div class="line"><a name="l04374"></a><span class="lineno"> 4374</span>&#160; </div>
<div class="line"><a name="l04375"></a><span class="lineno"> 4375</span>&#160; retval = STATUS_SUCCESS;</div>
<div class="line"><a name="l04376"></a><span class="lineno"> 4376</span>&#160; </div>
<div class="line"><a name="l04377"></a><span class="lineno"> 4377</span>&#160; } except(EXCEPTION_EXECUTE_HANDLER) {</div>
<div class="line"><a name="l04378"></a><span class="lineno"> 4378</span>&#160; </div>
<div class="line"><a name="l04379"></a><span class="lineno"> 4379</span>&#160; retval = STATUS_INVALID_PARAMETER_3;</div>
<div class="line"><a name="l04380"></a><span class="lineno"> 4380</span>&#160; }</div>
<div class="line"><a name="l04381"></a><span class="lineno"> 4381</span>&#160; </div>
<div class="line"><a name="l04382"></a><span class="lineno"> 4382</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l04383"></a><span class="lineno"> 4383</span>&#160; </div>
<div class="line"><a name="l04384"></a><span class="lineno"> 4384</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l04385"></a><span class="lineno"> 4385</span>&#160; </div>
<div class="line"><a name="l04386"></a><span class="lineno"> 4386</span>&#160; dwTotalSize += lpdm-&gt;dmSize + lpdm-&gt;dmDriverExtra;</div>
<div class="line"><a name="l04387"></a><span class="lineno"> 4387</span>&#160; </div>
<div class="line"><a name="l04388"></a><span class="lineno"> 4388</span>&#160; lpdm = (LPDEVMODEW) (((LPBYTE)lpdm) +</div>
<div class="line"><a name="l04389"></a><span class="lineno"> 4389</span>&#160; lpdm-&gt;dmSize +</div>
<div class="line"><a name="l04390"></a><span class="lineno"> 4390</span>&#160; lpdm-&gt;dmDriverExtra);</div>
<div class="line"><a name="l04391"></a><span class="lineno"> 4391</span>&#160; </div>
<div class="line"><a name="l04392"></a><span class="lineno"> 4392</span>&#160; }</div>
<div class="line"><a name="l04393"></a><span class="lineno"> 4393</span>&#160; }</div>
<div class="line"><a name="l04394"></a><span class="lineno"> 4394</span>&#160; </div>
<div class="line"><a name="l04395"></a><span class="lineno"> 4395</span>&#160; }</div>
<div class="line"><a name="l04396"></a><span class="lineno"> 4396</span>&#160; </div>
<div class="line"><a name="l04397"></a><span class="lineno"> 4397</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l04398"></a><span class="lineno"> 4398</span>&#160;<span class="comment"> * As an acceleration, we will only free the list if the call</span></div>
<div class="line"><a name="l04399"></a><span class="lineno"> 4399</span>&#160;<span class="comment"> * failed because &quot;i&quot; was too large, so that listing all the modes</span></div>
<div class="line"><a name="l04400"></a><span class="lineno"> 4400</span>&#160;<span class="comment"> * does not require building the list each time.</span></div>
<div class="line"><a name="l04401"></a><span class="lineno"> 4401</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l04402"></a><span class="lineno"> 4402</span>&#160; </div>
<div class="line"><a name="l04403"></a><span class="lineno"> 4403</span>&#160; <span class="keywordflow">if</span> (retval == STATUS_INVALID_PARAMETER_2) {</div>
<div class="line"><a name="l04404"></a><span class="lineno"> 4404</span>&#160; </div>
<div class="line"><a name="l04405"></a><span class="lineno"> 4405</span>&#160; <a class="code" href="a00665.html#a8c6e355920ecb443e8d0f47bfbfff26d">UserReleaseDevmodeList</a>(physinfo);</div>
<div class="line"><a name="l04406"></a><span class="lineno"> 4406</span>&#160; }</div>
<div class="line"><a name="l04407"></a><span class="lineno"> 4407</span>&#160; }</div>
<div class="line"><a name="l04408"></a><span class="lineno"> 4408</span>&#160; </div>
<div class="line"><a name="l04409"></a><span class="lineno"> 4409</span>&#160; <a class="code" href="a00665.html#ae1691bdb53d715053026f55f68e5d3f4">UserFreeDevice</a>(physinfo);</div>
<div class="line"><a name="l04410"></a><span class="lineno"> 4410</span>&#160; }</div>
<div class="line"><a name="l04411"></a><span class="lineno"> 4411</span>&#160; </div>
<div class="line"><a name="l04412"></a><span class="lineno"> 4412</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l04413"></a><span class="lineno"> 4413</span>&#160;<span class="comment"> * Update the driver extra size</span></div>
<div class="line"><a name="l04414"></a><span class="lineno"> 4414</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l04415"></a><span class="lineno"> 4415</span>&#160; </div>
<div class="line"><a name="l04416"></a><span class="lineno"> 4416</span>&#160; <span class="keywordflow">if</span> (retval == STATUS_SUCCESS)</div>
<div class="line"><a name="l04417"></a><span class="lineno"> 4417</span>&#160; {</div>
<div class="line"><a name="l04418"></a><span class="lineno"> 4418</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l04419"></a><span class="lineno"> 4419</span>&#160; lpDevMode-&gt;dmDriverExtra = DriverExtraSize;</div>
<div class="line"><a name="l04420"></a><span class="lineno"> 4420</span>&#160; } except (EXCEPTION_EXECUTE_HANDLER) {</div>
<div class="line"><a name="l04421"></a><span class="lineno"> 4421</span>&#160; retval = GetExceptionCode();</div>
<div class="line"><a name="l04422"></a><span class="lineno"> 4422</span>&#160; }</div>
<div class="line"><a name="l04423"></a><span class="lineno"> 4423</span>&#160; }</div>
<div class="line"><a name="l04424"></a><span class="lineno"> 4424</span>&#160; </div>
<div class="line"><a name="l04425"></a><span class="lineno"> 4425</span>&#160; TRACE(<span class="stringliteral">&quot;NtUserEnumDisplaySettings&quot;</span>);</div>
<div class="line"><a name="l04426"></a><span class="lineno"> 4426</span>&#160; </div>
<div class="line"><a name="l04427"></a><span class="lineno"> 4427</span>&#160; <a class="code" href="a00899.html#ac2181d07596893ed44d18aa267ce4d23">LeaveCrit</a>();</div>
<div class="line"><a name="l04428"></a><span class="lineno"> 4428</span>&#160; </div>
<div class="line"><a name="l04429"></a><span class="lineno"> 4429</span>&#160; <span class="keywordflow">return</span> (retval);</div>
<div class="line"><a name="l04430"></a><span class="lineno"> 4430</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a00365_source.html#l01552">tagPHYSICAL_DEV_INFO::cbdevmodeInfo</a>, <a class="el" href="a00365_source.html#l01553">tagPHYSICAL_DEV_INFO::devmodeInfo</a>, <a class="el" href="a00563_source.html#l00175">DWORD</a>, <a class="el" href="a00899.html#ae451a2dc8791c420d7c956a63adc33ba">EnterCrit()</a>, <a class="el" href="a00899.html#ac2181d07596893ed44d18aa267ce4d23">LeaveCrit()</a>, <a class="el" href="a00365_source.html#l01551">tagPHYSICAL_DEV_INFO::pCurrentDevmode</a>, <a class="el" href="a00665_source.html#l00073">ProbeAndCaptureDeviceName()</a>, <a class="el" href="a00371_source.html#l00029">RIP_WARNING</a>, <a class="el" href="a00371_source.html#l00119">RIPERR0</a>, <a class="el" href="a00365_source.html#l01545">tagPHYSICAL_DEV_INFO::szNtDeviceName</a>, <a class="el" href="a00665_source.html#l01758">UserBuildDevmodeList()</a>, <a class="el" href="a00665_source.html#l01721">UserFreeDevice()</a>, <a class="el" href="a00665_source.html#l01451">UserGetDeviceFromName()</a>, <a class="el" href="a00665_source.html#l00799">UserGetDisplayDriverParameters()</a> , 以及 <a class="el" href="a00665_source.html#l01942">UserReleaseDevmodeList()</a>.</p>
</div>
</div>
<a id="ad1a9b877f3705368d000061536e1b1fb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad1a9b877f3705368d000061536e1b1fb">&#9670;&nbsp;</a></span>ProbeAndCaptureDeviceName()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">BOOL ProbeAndCaptureDeviceName </td>
<td>(</td>
<td class="paramtype">PUNICODE_STRING&#160;</td>
<td class="paramname"><em>Destination</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PUNICODE_STRING&#160;</td>
<td class="paramname"><em>Source</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l00073">73</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;{</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; BOOL fFreeBuffer = FALSE;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; Destination-&gt;Buffer = NULL;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; Destination-&gt;Length = 0;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; </div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">if</span> (Source) {</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; </div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; *Destination = ProbeAndReadUnicodeString(Source);</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span> (Destination-&gt;Length) {</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="preprocessor">#if defined(_X86_)</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; ProbeForRead(Destination-&gt;Buffer, Destination-&gt;Length, <span class="keyword">sizeof</span>(BYTE));</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; ProbeForRead(Destination-&gt;Buffer, Destination-&gt;Length, <span class="keyword">sizeof</span>(WCHAR));</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; </div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; Destination-&gt;Buffer =</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; UserAllocPoolWithQuota(Destination-&gt;Length, TAG_TEXT2);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">if</span> (Destination-&gt;Buffer) {</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; fFreeBuffer = TRUE;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; RtlCopyMemory(Destination-&gt;Buffer,</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; Source-&gt;Buffer,</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; Destination-&gt;Length);</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; ExRaiseStatus(STATUS_NO_MEMORY);</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; }</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; } except (EXCEPTION_EXECUTE_HANDLER) {</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="a00371.html#a002956db9fb529e159fb441f09f39b42">RIPNTERR0</a>(GetExceptionCode(), <a class="code" href="a00371.html#ad6b24a3d61abdc148c8751b5c5add686">RIP_VERBOSE</a>, <span class="stringliteral">&quot;&quot;</span>);</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; </div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">if</span> (fFreeBuffer) {</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; UserFreePool(Destination-&gt;Buffer);</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; </div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">return</span> FALSE;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; }</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; </div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">if</span> (Destination-&gt;Length == 0) {</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="a02801.html">PDESKTOP</a> pdesk = <a class="code" href="a00257.html#a8315d2c807ba18ba9e528c40614b6173">PtiCurrent</a>()-&gt;<a class="code" href="a02889.html#abb1184e0c5805b5ad89b79dcc2bd17c8">rpdesk</a>;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; LPWSTR DeviceName;</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; USHORT Length;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; </div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">if</span> (pdesk) {</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment"> * Special case for boot-up time.</span></div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; DeviceName = pdesk-&gt;<a class="code" href="a02801.html#a7865078d53afb2719414b44d87f75c5d">pDispInfo</a>-&gt;<a class="code" href="a02605.html#a76af5d5bf5f5037a7ddcd8bb543fd388">pDevInfo</a>-&gt;<a class="code" href="a02601.html#a19e507bdf81c67304d8ba81c600ac0eb">szNtDeviceName</a>;</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; DeviceName = <a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a76af5d5bf5f5037a7ddcd8bb543fd388">pDevInfo</a>-&gt;<a class="code" href="a02601.html#a19e507bdf81c67304d8ba81c600ac0eb">szNtDeviceName</a>;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; Length = wcslen(DeviceName);</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; Destination-&gt;Buffer =</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; UserAllocPoolWithQuota(16 * <span class="keyword">sizeof</span>(WCHAR), TAG_TEXT2);</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; </div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">if</span> (Destination-&gt;Buffer) {</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; RtlCopyMemory(Destination-&gt;Buffer,</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; DeviceName,</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; 16 * <span class="keyword">sizeof</span>(WCHAR));</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; </div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; RtlInitUnicodeString(Destination, Destination-&gt;Buffer);</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; </div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">return</span> FALSE;</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; </div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">return</span> TRUE;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a03257_source.html#l00125">gpDispInfo</a>, <a class="el" href="a00365_source.html#l01578">tagDISPLAYINFO::pDevInfo</a>, <a class="el" href="a00899_source.html#l01707">tagDESKTOP::pDispInfo</a>, <a class="el" href="a00263_source.html#l00526">PtiCurrent()</a>, <a class="el" href="a00371_source.html#l00030">RIP_VERBOSE</a>, <a class="el" href="a00371_source.html#l00125">RIPNTERR0</a>, <a class="el" href="a00899_source.html#l02288">tagTHREADINFO::rpdesk</a> , 以及 <a class="el" href="a00365_source.html#l01545">tagPHYSICAL_DEV_INFO::szNtDeviceName</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="a03614_source.html#l00821">NtUserCreateDesktop()</a>, <a class="el" href="a00665_source.html#l04187">NtUserEnumDisplaySettings()</a> , 以及 <a class="el" href="a00689_source.html#l01097">UserChangeDisplaySettings()</a>.</p>
</div>
</div>
<a id="a7f72492be72deb72088a46321f3703e9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7f72492be72deb72088a46321f3703e9">&#9670;&nbsp;</a></span>ProbeAndCaptureDevmode()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">NTSTATUS ProbeAndCaptureDevmode </td>
<td>(</td>
<td class="paramtype">PUNICODE_STRING&#160;</td>
<td class="paramname"><em>pstrDeviceName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PDEVMODEW *&#160;</td>
<td class="paramname"><em>DestinationDevmode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PDEVMODEW&#160;</td>
<td class="paramname"><em>SourceDevmode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">BOOL&#160;</td>
<td class="paramname"><em>bKernelMode</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l01977">1977</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160;{</div>
<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160; NTSTATUS ntRet;</div>
<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160; BOOL bRet = FALSE;</div>
<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160; BOOL btmpError;</div>
<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160; ULONG sourceSize;</div>
<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160; ULONG sourceSizeExtra;</div>
<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160; ULONG sizeExtra;</div>
<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160; PDEVMODEW matchedDevmode = NULL;</div>
<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160; PDEVMODEW partialDevmode;</div>
<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160; </div>
<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160; <a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a> tmpDisplayFlags = 0;</div>
<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160; <a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a> tmpPanningWidth = 0;</div>
<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160; <a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a> tmpPanningHeight = 0;</div>
<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160; </div>
<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160; </div>
<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: CaptMatchDevmode: Entering\n&quot;</span>));</div>
<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160; </div>
<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160; *DestinationDevmode = NULL;</div>
<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160; </div>
<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160; <span class="keywordflow">if</span> (SourceDevmode == NULL) {</div>
<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; </div>
<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: CaptMatchDevmode: Exit DEVMODE NULL\n\n&quot;</span>));</div>
<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160; <span class="keywordflow">return</span> STATUS_SUCCESS;</div>
<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; }</div>
<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; </div>
<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160; partialDevmode = UserAllocPool(<span class="keyword">sizeof</span>(DEVMODEW) + MAXUSHORT,</div>
<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160; TAG_DEVMODE);</div>
<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; </div>
<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160; <span class="keywordflow">if</span> (partialDevmode == NULL) {</div>
<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160; </div>
<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: CaptMatchDevmode: Could not allocate partial DEVMODE\n\n&quot;</span>));</div>
<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160; <span class="keywordflow">return</span> STATUS_UNSUCCESSFUL;</div>
<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160; }</div>
<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160; </div>
<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160;<span class="comment"> * Put everything in a try except so we can always reference the original</span></div>
<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160;<span class="comment"> * passed in structure.</span></div>
<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160; </div>
<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160; <span class="keywordflow">if</span> (!bKernelMode) {</div>
<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160; ProbeForRead(SourceDevmode,</div>
<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160; FIELD_OFFSET(DEVMODEW, dmFields),</div>
<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160; <span class="keyword">sizeof</span>(<a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a>));</div>
<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160; }</div>
<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160; </div>
<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160;<span class="comment"> * Capture these so that they don&#39;t change right after the probe.</span></div>
<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160; </div>
<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160; sourceSize = SourceDevmode-&gt;dmSize;</div>
<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160; sourceSizeExtra = SourceDevmode-&gt;dmDriverExtra;</div>
<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160; </div>
<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160; <span class="keywordflow">if</span> (!bKernelMode) {</div>
<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160; ProbeForRead(SourceDevmode,</div>
<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160; sourceSize + sourceSizeExtra,</div>
<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160; <span class="keyword">sizeof</span>(<a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a>));</div>
<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160; }</div>
<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160; </div>
<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160;<span class="comment"> * At the introduction time of this API, the DEVMODE already contained</span></div>
<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160;<span class="comment"> * up to the dmDisplayFrequency field. We will fail is the DEVMODE is</span></div>
<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;<span class="comment"> * smaller than that.</span></div>
<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160; </div>
<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160; <span class="keywordflow">if</span> (sourceSize &gt;= FIELD_OFFSET(DEVMODEW, dmICMMethod)) {</div>
<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160; </div>
<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160; UNICODE_STRING uString;</div>
<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160; </div>
<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160;<span class="comment"> * Lets build a temporary DEVMODE that will contain the</span></div>
<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;<span class="comment"> * &quot;wished for&quot; DEVMODE, based on matching from the registry.</span></div>
<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160;<span class="comment"> * Only match the basic devmode. Other fields (optional ones</span></div>
<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;<span class="comment"> * will be added later)</span></div>
<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160;<span class="comment"> * NOTE special case VGA mode so that we don&#39;t try to match to the</span></div>
<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160;<span class="comment"> * current screen mode.</span></div>
<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160; </div>
<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160; RtlZeroMemory(partialDevmode, <span class="keyword">sizeof</span>(DEVMODEW));</div>
<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160; partialDevmode-&gt;dmSize = 0xDDDD;</div>
<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160; partialDevmode-&gt;dmDriverExtra = MAXUSHORT;</div>
<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160; </div>
<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; RtlInitUnicodeString(&amp;uString, L<span class="stringliteral">&quot;VGACOMPATIBLE&quot;</span>);</div>
<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160; </div>
<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160; <span class="keywordflow">if</span> (RtlEqualUnicodeString(pstrDeviceName,</div>
<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160; &amp;uString,</div>
<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160; TRUE)) {</div>
<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160; </div>
<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160;<span class="comment"> * BUGBUG - need to verify these structures.</span></div>
<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160; </div>
<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: CaptMatchDevmode: DEVMODE for fullscreen\n\n&quot;</span>));</div>
<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160; </div>
<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160; *partialDevmode = *SourceDevmode;</div>
<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; </div>
<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160; </div>
<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; <span class="keywordflow">if</span> (!NT_SUCCESS(<a class="code" href="a00665.html#a1496fe4e3afa850f6bd625b0c3542b78">UserGetDisplayDriverParameters</a>(pstrDeviceName,</div>
<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160; partialDevmode,</div>
<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160; <a class="code" href="a00665.html#a4f95d12ae9db57753d1ce7447479f0ee">gbBaseVideo</a>))) {</div>
<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160; partialDevmode-&gt;dmDriverExtra = 0;</div>
<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160; </div>
<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>) {</div>
<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;<span class="comment"> * Use the caps as a guess for this.</span></div>
<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160; </div>
<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#a41f433389f20db57f042022a662e96de">RIP_WARNING</a>, <span class="stringliteral">&quot;UserInit: CaptMatchDevmode: Could not get current devmode\n&quot;</span>);</div>
<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160; </div>
<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160; partialDevmode-&gt;dmBitsPerPel =</div>
<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160; GreGetDeviceCaps(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>, BITSPIXEL) *</div>
<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160; GreGetDeviceCaps(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>, PLANES);</div>
<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160; partialDevmode-&gt;dmPelsWidth =</div>
<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; GreGetDeviceCaps(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>, HORZRES);</div>
<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160; partialDevmode-&gt;dmPelsHeight =</div>
<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160; GreGetDeviceCaps(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>, VERTRES);</div>
<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160; partialDevmode-&gt;dmDisplayFrequency =</div>
<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160; GreGetDeviceCaps(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>, VREFRESH);</div>
<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160; }</div>
<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160; }</div>
<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160; </div>
<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160; <span class="keywordflow">if</span> ((SourceDevmode-&gt;dmFields &amp; DM_BITSPERPEL) &amp;&amp;</div>
<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160; (SourceDevmode-&gt;dmBitsPerPel != 0)) {</div>
<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160; </div>
<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160; partialDevmode-&gt;dmBitsPerPel = SourceDevmode-&gt;dmBitsPerPel;</div>
<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160; }</div>
<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160; </div>
<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160; <span class="keywordflow">if</span> ((SourceDevmode-&gt;dmFields &amp; DM_PELSWIDTH) &amp;&amp;</div>
<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160; (SourceDevmode-&gt;dmPelsWidth != 0)) {</div>
<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160; </div>
<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160; partialDevmode-&gt;dmPelsWidth = SourceDevmode-&gt;dmPelsWidth;</div>
<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160; }</div>
<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160; </div>
<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160; <span class="keywordflow">if</span> ((SourceDevmode-&gt;dmFields &amp; DM_PELSHEIGHT) &amp;&amp;</div>
<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160; (SourceDevmode-&gt;dmPelsHeight != 0)) {</div>
<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160; </div>
<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160; partialDevmode-&gt;dmPelsHeight = SourceDevmode-&gt;dmPelsHeight;</div>
<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160; }</div>
<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160; </div>
<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160; <span class="keywordflow">if</span> ((SourceDevmode-&gt;dmFields &amp; DM_DISPLAYFREQUENCY) &amp;&amp;</div>
<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160; (SourceDevmode-&gt;dmDisplayFrequency != 0)) {</div>
<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160; </div>
<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160; partialDevmode-&gt;dmDisplayFrequency = SourceDevmode-&gt;dmDisplayFrequency;</div>
<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160; </div>
<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160; </div>
<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160;<span class="comment"> * Only use the registry refresh rate if we are going</span></div>
<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;<span class="comment"> * down in resolution. If we are going up in resolution,</span></div>
<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;<span class="comment"> * we will want to pick the lowest refresh rate that</span></div>
<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160;<span class="comment"> * makes sense.</span></div>
<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;<span class="comment"> * The exception to this is if we have resetting the mode</span></div>
<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;<span class="comment"> * to the regsitry mode (passing in all 0&#39;s), in which case</span></div>
<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;<span class="comment"> * we want exactly what is in the registry.</span></div>
<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160; </div>
<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160; <span class="keywordflow">if</span> ( ((SourceDevmode-&gt;dmPelsWidth != 0) ||</div>
<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160; (SourceDevmode-&gt;dmPelsHeight != 0)) &amp;&amp;</div>
<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160; (<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>) &amp;&amp;</div>
<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160; (partialDevmode-&gt;dmPelsWidth &gt;</div>
<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160; (USHORT) GreGetDeviceCaps(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#af0da313e582dc95c2853349086631cd8">hdcScreen</a>,</div>
<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160; HORZRES))) {</div>
<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160; </div>
<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160; partialDevmode-&gt;dmDisplayFrequency = 0;</div>
<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160; }</div>
<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160; }</div>
<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160; }</div>
<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160; </div>
<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160; btmpError = FALSE;</div>
<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160; </div>
<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;<span class="comment"> * These fields are somewhat optional.</span></div>
<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160;<span class="comment"> * We capture them if they are valid. Otherwise, they will</span></div>
<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160;<span class="comment"> * be initialized back to zero.</span></div>
<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160; </div>
<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160;<span class="comment"> * Pick whichever set of flags we can. Source is first choice,</span></div>
<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160;<span class="comment"> * registry is second.</span></div>
<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160; </div>
<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160; <span class="keywordflow">if</span> (SourceDevmode-&gt;dmFields &amp; DM_DISPLAYFLAGS) {</div>
<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160; <span class="keywordflow">if</span> (SourceDevmode-&gt;dmDisplayFlags &amp; (~DMDISPLAYFLAGS_VALID)) {</div>
<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160; btmpError = TRUE;</div>
<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160; }</div>
<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160; tmpDisplayFlags = SourceDevmode-&gt;dmDisplayFlags;</div>
<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((partialDevmode-&gt;dmFields &amp; DM_DISPLAYFLAGS) &amp;&amp;</div>
<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160; (partialDevmode-&gt;dmDisplayFlags &amp;</div>
<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160; (~DMDISPLAYFLAGS_VALID))) {</div>
<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160; </div>
<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160; tmpDisplayFlags = partialDevmode-&gt;dmDisplayFlags;</div>
<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160; }</div>
<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160; </div>
<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160;<span class="comment"> * If the caller specified panning keep the value, unless it was</span></div>
<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;<span class="comment"> * bigger than the resolution, which is an error.</span></div>
<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160;<span class="comment"> * Otherwise, use the value from the registry if it makes sense</span></div>
<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160;<span class="comment"> * (i.e. panning is still smaller than the resolution).</span></div>
<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160; </div>
<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160; <span class="keywordflow">if</span> (SourceDevmode-&gt;dmFields &amp; DM_PANNINGWIDTH) {</div>
<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160; <span class="keywordflow">if</span> (SourceDevmode-&gt;dmPanningWidth &gt; partialDevmode-&gt;dmPelsWidth) {</div>
<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160; btmpError = TRUE;</div>
<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160; }</div>
<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160; tmpPanningWidth = SourceDevmode-&gt;dmPanningWidth;</div>
<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160; </div>
<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((partialDevmode-&gt;dmFields &amp; DM_PANNINGWIDTH) &amp;&amp;</div>
<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160; (partialDevmode-&gt;dmPanningWidth &lt;</div>
<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160; partialDevmode-&gt;dmPelsWidth)) {</div>
<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160; </div>
<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160; tmpPanningWidth = partialDevmode-&gt;dmPanningWidth;</div>
<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160; }</div>
<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160; </div>
<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160; <span class="keywordflow">if</span> (SourceDevmode-&gt;dmFields &amp; DM_PANNINGHEIGHT) {</div>
<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160; <span class="keywordflow">if</span> (SourceDevmode-&gt;dmPanningHeight &gt; partialDevmode-&gt;dmPelsHeight) {</div>
<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160; btmpError = TRUE;</div>
<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160; }</div>
<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160; tmpPanningHeight = SourceDevmode-&gt;dmPanningHeight;</div>
<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160; </div>
<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((partialDevmode-&gt;dmFields &amp; DM_PANNINGHEIGHT) &amp;&amp;</div>
<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160; (partialDevmode-&gt;dmPanningHeight &lt;</div>
<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160; partialDevmode-&gt;dmPelsHeight)) {</div>
<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160; </div>
<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160; tmpPanningHeight = partialDevmode-&gt;dmPanningHeight;</div>
<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160; }</div>
<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160; </div>
<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160; </div>
<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160; <span class="keywordflow">if</span> (btmpError == TRUE) {</div>
<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160;<span class="comment"> * The panning values or the flags are invalid</span></div>
<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160; </div>
<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#afa5f32de88404289ec03cd2c0e61e94f">RIP_ERROR</a>, <span class="stringliteral">&quot;UserInit: CaptMatchDevmode: Invalid Optional DEVMODE fields\n&quot;</span>);</div>
<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160; </div>
<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160; </div>
<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160;<span class="comment"> * Allocate enough memory so we can store the whole devmode.</span></div>
<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160; </div>
<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160; sizeExtra = sourceSizeExtra;</div>
<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160; <span class="keywordflow">if</span> (sizeExtra == 0) {</div>
<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>&#160; sizeExtra = partialDevmode-&gt;dmDriverExtra;</div>
<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160; }</div>
<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160; </div>
<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160; <span class="keywordflow">if</span> (matchedDevmode = UserAllocPool(<span class="keyword">sizeof</span>(DEVMODEW) + sizeExtra,</div>
<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>&#160; TAG_DEVMODE)) {</div>
<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>&#160; </div>
<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160;<span class="comment"> * Zero out the DEVMODE in case we only get data for part</span></div>
<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>&#160;<span class="comment"> * of it from the driver.</span></div>
<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160; </div>
<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160; RtlZeroMemory(matchedDevmode, <span class="keyword">sizeof</span>(DEVMODEW));</div>
<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160; </div>
<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>&#160;<span class="comment"> * Let&#39;s copy any DriverExtra information that the</span></div>
<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>&#160;<span class="comment"> * application may have passed down while we are still in</span></div>
<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160;<span class="comment"> * the try\except. If we fail the call later, the memory</span></div>
<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>&#160;<span class="comment"> * will get deallocated anyways.</span></div>
<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160;<span class="comment"> * If the application did not specify any such data, then</span></div>
<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160;<span class="comment"> * copy it from the registry.</span></div>
<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>&#160; </div>
<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>&#160; <span class="keywordflow">if</span> (sourceSizeExtra) {</div>
<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>&#160; </div>
<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>&#160; RtlCopyMemory(matchedDevmode + 1,</div>
<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>&#160; (PUCHAR)SourceDevmode + sourceSize,</div>
<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>&#160; sizeExtra);</div>
<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>&#160; </div>
<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (partialDevmode-&gt;dmDriverExtra) {</div>
<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>&#160; </div>
<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>&#160; RtlCopyMemory(matchedDevmode + 1,</div>
<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160; (PUCHAR)partialDevmode + partialDevmode-&gt;dmSize,</div>
<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>&#160; sizeExtra);</div>
<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>&#160; </div>
<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>&#160; }</div>
<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>&#160; }</div>
<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>&#160; }</div>
<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>&#160; }</div>
<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>&#160; </div>
<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: CaptMatchDevmode: Capture Complete\n&quot;</span>));</div>
<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160; </div>
<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>&#160; } except (EXCEPTION_EXECUTE_HANDLER) {</div>
<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160; <a class="code" href="a00371.html#a002956db9fb529e159fb441f09f39b42">RIPNTERR0</a>(GetExceptionCode(), <a class="code" href="a00371.html#ad6b24a3d61abdc148c8751b5c5add686">RIP_VERBOSE</a>, <span class="stringliteral">&quot;&quot;</span>);</div>
<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>&#160; </div>
<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160;<span class="comment"> * If we hit an exception, free the buffer we have allocated.</span></div>
<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>&#160; </div>
<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>&#160; <span class="keywordflow">if</span> (matchedDevmode) {</div>
<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>&#160; UserFreePool(matchedDevmode);</div>
<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>&#160; }</div>
<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>&#160; </div>
<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>&#160; matchedDevmode = NULL;</div>
<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>&#160; }</div>
<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>&#160; </div>
<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>&#160;<span class="comment"> * This is our matching algorithm, based on requirements from Win95.</span></div>
<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>&#160;<span class="comment"> * As a rule, a value in the DEVMODE is only valid is BOTH the value is</span></div>
<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160;<span class="comment"> * non-zero, and the dmFields flag is set. Otherwise, the value from the</span></div>
<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>&#160;<span class="comment"> * registry must be used</span></div>
<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>&#160;<span class="comment"> * For X, Y and color depth, we will follow this rule.</span></div>
<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>&#160;<span class="comment"> * For the refresh rate, we are just trying to find something that works</span></div>
<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160;<span class="comment"> * for the screen. We are far from guaranteed that the refresh rate in</span></div>
<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>&#160;<span class="comment"> * the registry will be found for the X and Y we have since refresh rates</span></div>
<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>&#160;<span class="comment"> * vary a lot from mode to mode.</span></div>
<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>&#160;<span class="comment"> * So if the value is not specifically set and we do not find the exact</span></div>
<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>&#160;<span class="comment"> * value from the reigstry in the new resolution, Then we will try 60 Hz.</span></div>
<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>&#160;<span class="comment"> * We just want to get something that works MOST of the time so that the</span></div>
<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>&#160;<span class="comment"> * user does not get a mode that does not work.</span></div>
<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160;<span class="comment"> * For the other fields (dmDisplayFlags, and panning), we just pass on what</span></div>
<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160;<span class="comment"> * the application specified, and it&#39;s up to the driver to parse those,</span></div>
<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>&#160;<span class="comment"> * fields appropriatly.</span></div>
<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160; </div>
<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160;<span class="comment"> * Now lets enumerate all the DEVMODEs and see if we have one</span></div>
<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160;<span class="comment"> * that matches what we need.</span></div>
<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>&#160; </div>
<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>&#160; <span class="keywordflow">if</span> (matchedDevmode) {</div>
<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>&#160; </div>
<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160; BOOL bFirstMatch = FALSE;</div>
<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160; BOOL bMatch60 = FALSE;</div>
<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160; BOOL bExactMatch = FALSE;</div>
<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160; <a class="code" href="a02601.html">PPHYSICAL_DEV_INFO</a> physinfo;</div>
<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160; ULONG cbdevmodeInfo;</div>
<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>&#160; PDEVMODEW pdevmodeInfo;</div>
<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>&#160; </div>
<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: CaptMatchDevmode: Start matching\n&quot;</span>));</div>
<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>&#160; </div>
<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>&#160;<span class="comment"> * PERF - Can we use someething else to synchronize access to the</span></div>
<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>&#160;<span class="comment"> * list of modes ?</span></div>
<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>&#160; </div>
<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160; physinfo = <a class="code" href="a00665.html#a291aca25f546e197608f39e4887001a9">UserGetDeviceFromName</a>(pstrDeviceName, USER_DEVICE_NOTOWNED);</div>
<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>&#160; </div>
<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160; <span class="keywordflow">if</span> (physinfo) {</div>
<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160; </div>
<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>&#160; <span class="comment">// EnterCrit();</span></div>
<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>&#160; </div>
<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160;<span class="comment"> * We should never be doing a mode match on a MIRRORING_DRIVER</span></div>
<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160; <a class="code" href="a00371.html#a162a73e20dfabca084a3ebb4581631a8">UserAssert</a>(!(physinfo-&gt;<a class="code" href="a02601.html#a65e861fd574d4b5dd70d500641b395e8">stateFlags</a> &amp; DISPLAY_DEVICE_MIRRORING_DRIVER));</div>
<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>&#160; </div>
<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>&#160; <a class="code" href="a00665.html#af58d084fab4188005b01c976f76bbefa">UserBuildDevmodeList</a>(physinfo);</div>
<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>&#160; </div>
<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160; cbdevmodeInfo = physinfo-&gt;<a class="code" href="a02601.html#a11272e040ff3989da159f50e88b7b8c6">cbdevmodeInfo</a>;</div>
<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>&#160; pdevmodeInfo = physinfo-&gt;<a class="code" href="a02601.html#a1fe37d9234f46b11eab06dbfbafab7e9">devmodeInfo</a>;</div>
<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>&#160; </div>
<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160;<span class="comment"> * If we did not find a mode because the caller was asking for the</span></div>
<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>&#160;<span class="comment"> * default mode, then just return the first mode.</span></div>
<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>&#160; </div>
<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160; <span class="keywordflow">if</span> ((partialDevmode-&gt;dmBitsPerPel == 0) &amp;&amp;</div>
<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>&#160; (partialDevmode-&gt;dmPelsWidth == 0) &amp;&amp;</div>
<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160; (partialDevmode-&gt;dmPelsHeight == 0) &amp;&amp;</div>
<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160; (physinfo-&gt;<a class="code" href="a02601.html#a11272e040ff3989da159f50e88b7b8c6">cbdevmodeInfo</a> &gt; 0)) {</div>
<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160; </div>
<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160; </div>
<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#a41f433389f20db57f042022a662e96de">RIP_WARNING</a>, <span class="stringliteral">&quot;UserInit: CaptMatchDevmode: DEFAULT DEVMODE returned\n&quot;</span>);</div>
<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160; </div>
<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160; bFirstMatch = TRUE;</div>
<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>&#160; RtlCopyMemory(matchedDevmode,</div>
<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>&#160; physinfo-&gt;<a class="code" href="a02601.html#a1fe37d9234f46b11eab06dbfbafab7e9">devmodeInfo</a>,</div>
<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>&#160; physinfo-&gt;<a class="code" href="a02601.html#a1fe37d9234f46b11eab06dbfbafab7e9">devmodeInfo</a>-&gt;dmSize);</div>
<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>&#160; </div>
<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160; cbdevmodeInfo = 0;</div>
<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160; }</div>
<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160; </div>
<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160; <span class="keywordflow">while</span> (cbdevmodeInfo &gt; 0) {</div>
<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>&#160; </div>
<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160; <span class="keywordflow">if</span> ((partialDevmode-&gt;dmBitsPerPel ==</div>
<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>&#160; pdevmodeInfo-&gt;dmBitsPerPel) &amp;&amp;</div>
<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160; (partialDevmode-&gt;dmPelsWidth ==</div>
<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160; pdevmodeInfo-&gt;dmPelsWidth) &amp;&amp;</div>
<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160; (partialDevmode-&gt;dmPelsHeight ==</div>
<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160; pdevmodeInfo-&gt;dmPelsHeight)) {</div>
<div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>&#160; </div>
<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160;<span class="comment"> * Pick at least the first mode that matches the resolution</span></div>
<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160;<span class="comment"> * so that we at least have a chance at working.</span></div>
<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160;<span class="comment"> * Then pick 60 Hz if we find it.</span></div>
<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160;<span class="comment"> * Even better, pick the refresh that matches the current</span></div>
<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>&#160;<span class="comment"> * refresh (we assume that what&#39;s in the registry has the</span></div>
<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>&#160;<span class="comment"> * best chance of working.</span></div>
<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>&#160; </div>
<div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160; <span class="keywordflow">if</span> (bFirstMatch == FALSE) {</div>
<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160; </div>
<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>&#160;<span class="comment"> * BUGBUG The driver DEVMODE size could be smaller than</span></div>
<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>&#160;<span class="comment"> * our current DEVMODE size.</span></div>
<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>&#160; </div>
<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>&#160; RtlCopyMemory(matchedDevmode,</div>
<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>&#160; pdevmodeInfo,</div>
<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>&#160; pdevmodeInfo-&gt;dmSize);</div>
<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>&#160; </div>
<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160; bFirstMatch = TRUE;</div>
<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>&#160; </div>
<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>&#160; }</div>
<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>&#160; </div>
<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>&#160; <span class="keywordflow">if</span> ((bMatch60 == FALSE) &amp;&amp;</div>
<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>&#160; (pdevmodeInfo-&gt;dmDisplayFrequency == 60)) {</div>
<div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>&#160; </div>
<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160; RtlCopyMemory(matchedDevmode,</div>
<div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>&#160; pdevmodeInfo,</div>
<div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>&#160; pdevmodeInfo-&gt;dmSize);</div>
<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>&#160; </div>
<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>&#160; bMatch60 = TRUE;</div>
<div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>&#160; }</div>
<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>&#160; </div>
<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>&#160; <span class="keywordflow">if</span> (partialDevmode-&gt;dmDisplayFrequency ==</div>
<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>&#160; pdevmodeInfo-&gt;dmDisplayFrequency) {</div>
<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>&#160; </div>
<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>&#160;<span class="comment"> * We found even better than 60 - an exact match !</span></div>
<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>&#160; </div>
<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>&#160; bMatch60 = TRUE;</div>
<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>&#160; bExactMatch = TRUE;</div>
<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>&#160; </div>
<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>&#160; RtlCopyMemory(matchedDevmode,</div>
<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>&#160; pdevmodeInfo,</div>
<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>&#160; pdevmodeInfo-&gt;dmSize);</div>
<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>&#160; </div>
<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>&#160; </div>
<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>&#160;<span class="comment"> * For now, we ignore these other fields since they</span></div>
<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160;<span class="comment"> * considered optional.</span></div>
<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>&#160; </div>
<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160; <span class="comment">// pdevmodeInfo-&gt;dmDisplayFlags;</span></div>
<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>&#160; <span class="comment">// pdevmodeInfo-&gt;dmPanningWidth;</span></div>
<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160; <span class="comment">// pdevmodeInfo-&gt;dmPanningHeight;</span></div>
<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>&#160; </div>
<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>&#160; }</div>
<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>&#160; </div>
<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>&#160; }</div>
<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>&#160; </div>
<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>&#160; cbdevmodeInfo -= (pdevmodeInfo-&gt;dmSize +</div>
<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>&#160; pdevmodeInfo-&gt;dmDriverExtra);</div>
<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>&#160; </div>
<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>&#160; pdevmodeInfo = (PDEVMODEW) ((PUCHAR) pdevmodeInfo +</div>
<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>&#160; pdevmodeInfo-&gt;dmSize +</div>
<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>&#160; pdevmodeInfo-&gt;dmDriverExtra);</div>
<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>&#160; }</div>
<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>&#160; </div>
<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>&#160;<span class="comment"> * Always set these flags since we initialize the values.</span></div>
<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160;<span class="comment"> * We need consistent flags all the time to avoid extra modesets</span></div>
<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>&#160;<span class="comment"> * Also, force font size to be static for now.</span></div>
<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>&#160; <span class="keywordflow">if</span> (bFirstMatch) {</div>
<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>&#160; </div>
<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>&#160; matchedDevmode-&gt;dmDriverExtra = (WORD) sizeExtra;</div>
<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>&#160; matchedDevmode-&gt;dmLogPixels = partialDevmode-&gt;dmLogPixels;</div>
<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>&#160; </div>
<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>&#160; matchedDevmode-&gt;dmFields |= (DM_PANNINGHEIGHT |</div>
<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>&#160; DM_PANNINGWIDTH |</div>
<div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160; DM_DISPLAYFLAGS |</div>
<div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160; DM_LOGPIXELS);</div>
<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>&#160; </div>
<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160;<span class="comment"> * Check that the display driver specified all the other</span></div>
<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160;<span class="comment"> * flags (res, color, frequency) properly.</span></div>
<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160; </div>
<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160; <span class="keywordflow">if</span> ((matchedDevmode-&gt;dmFields &amp; <a class="code" href="a00665.html#a659e9e6483dce7cb60583d9b35f14de4">DM_INTERNAL_VALID_FLAGS</a>) !=</div>
<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160; <a class="code" href="a00665.html#a659e9e6483dce7cb60583d9b35f14de4">DM_INTERNAL_VALID_FLAGS</a>) {</div>
<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160; </div>
<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#a41f433389f20db57f042022a662e96de">RIP_WARNING</a>, <span class="stringliteral">&quot;UserInit: CaptMatchDevmode: BAD DM FLAGS\n&quot;</span>);</div>
<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>&#160; }</div>
<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>&#160; </div>
<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>&#160;<span class="comment"> * In the case of a good match, also use these extra values.</span></div>
<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160; </div>
<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160; matchedDevmode-&gt;dmDisplayFlags = tmpDisplayFlags;</div>
<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160; matchedDevmode-&gt;dmPanningWidth = tmpPanningWidth;</div>
<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160; matchedDevmode-&gt;dmPanningHeight = tmpPanningHeight;</div>
<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160; }</div>
<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160; </div>
<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160;<span class="comment"> * MAJOR optimization : Do not free the list at this point.</span></div>
<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>&#160;<span class="comment"> * Many apps call EnumDisplaySettings, and for each mode call</span></div>
<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>&#160;<span class="comment"> * ChangeDisplaySettings with it to see if it can be changed</span></div>
<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>&#160;<span class="comment"> * dynamically. When we free the list here, it causes to recreate</span></div>
<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>&#160;<span class="comment"> * the list for each mode we have in the list, which can take on</span></div>
<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>&#160;<span class="comment"> * the order of 30 seconds if there are multiple display drivers</span></div>
<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>&#160;<span class="comment"> * involved.</span></div>
<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>&#160;<span class="comment"> * Even if we keep the list here, it should properly get freed</span></div>
<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>&#160;<span class="comment"> * at the end of EnumDisplaySettings.</span></div>
<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>&#160;<span class="comment"> * UserReleaseDevmodeList(physinfo);</span></div>
<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>&#160; </div>
<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>&#160;<span class="comment"> * LeaveCrit();</span></div>
<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>&#160; </div>
<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>&#160; <a class="code" href="a00665.html#ae1691bdb53d715053026f55f68e5d3f4">UserFreeDevice</a>(physinfo);</div>
<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>&#160; }</div>
<div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>&#160; </div>
<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>&#160;<span class="comment"> * Exit path</span></div>
<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>&#160; <span class="keywordflow">if</span> (bFirstMatch == TRUE) {</div>
<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>&#160; </div>
<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: CaptMatchDevmode: Matched DEVMODE\n&quot;</span>));</div>
<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>&#160; </div>
<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; Size = %d\n&quot;</span>, matchedDevmode-&gt;dmSize));</div>
<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; Fields = %08lx\n&quot;</span>, matchedDevmode-&gt;dmFields));</div>
<div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; XResolution = %d\n&quot;</span>, matchedDevmode-&gt;dmPelsWidth));</div>
<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; YResolution = %d\n&quot;</span>, matchedDevmode-&gt;dmPelsHeight));</div>
<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; Bpp = %d\n&quot;</span>, matchedDevmode-&gt;dmBitsPerPel));</div>
<div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; Frequency = %d\n&quot;</span>, matchedDevmode-&gt;dmDisplayFrequency));</div>
<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; Flags = %d\n&quot;</span>, matchedDevmode-&gt;dmDisplayFlags));</div>
<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; XPanning = %d\n&quot;</span>, matchedDevmode-&gt;dmPanningWidth));</div>
<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; YPanning = %d\n&quot;</span>, matchedDevmode-&gt;dmPanningHeight));</div>
<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; DPI = %d\n&quot;</span>, matchedDevmode-&gt;dmLogPixels));</div>
<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; DriverExtra = %d&quot;</span>, matchedDevmode-&gt;dmDriverExtra));</div>
<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>&#160; <span class="keywordflow">if</span> (matchedDevmode-&gt;dmDriverExtra) {</div>
<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; - %08lx %08lx\n&quot;</span>,</div>
<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>&#160; *(PULONG)(((PUCHAR)matchedDevmode)+matchedDevmode-&gt;dmSize),</div>
<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>&#160; *(PULONG)(((PUCHAR)matchedDevmode)+matchedDevmode-&gt;dmSize + 4)));</div>
<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;\n&quot;</span>));</div>
<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>&#160; }</div>
<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>&#160; </div>
<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>&#160; *DestinationDevmode = matchedDevmode;</div>
<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>&#160; </div>
<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>&#160; ntRet = bExactMatch ? STATUS_SUCCESS : STATUS_RECEIVE_PARTIAL;</div>
<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>&#160; </div>
<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>&#160; </div>
<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>&#160; UserFreePool(matchedDevmode);</div>
<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>&#160; ntRet = STATUS_UNSUCCESSFUL;</div>
<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>&#160; }</div>
<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>&#160; }</div>
<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>&#160; </div>
<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>&#160; UserFreePool(partialDevmode);</div>
<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>&#160; </div>
<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>&#160; <span class="keywordflow">if</span> (NT_SUCCESS(ntRet)) {</div>
<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>&#160; <span class="keywordflow">if</span> (ntRet == STATUS_RECEIVE_PARTIAL) {</div>
<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: CaptMatchDevmode: Exit partial success\n\n&quot;</span>));</div>
<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: CaptMatchDevmode: Exit exact success\n\n&quot;</span>));</div>
<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>&#160; }</div>
<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: CaptMatchDevmode: Exit error\n\n&quot;</span>));</div>
<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160; }</div>
<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>&#160; </div>
<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>&#160; <span class="keywordflow">return</span> (ntRet);</div>
<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a00365_source.html#l01552">tagPHYSICAL_DEV_INFO::cbdevmodeInfo</a>, <a class="el" href="a00365_source.html#l01553">tagPHYSICAL_DEV_INFO::devmodeInfo</a>, <a class="el" href="a00665_source.html#l00050">DM_INTERNAL_VALID_FLAGS</a>, <a class="el" href="a00563_source.html#l00175">DWORD</a>, <a class="el" href="a00665_source.html#l00045">gbBaseVideo</a>, <a class="el" href="a03257_source.html#l00125">gpDispInfo</a>, <a class="el" href="a00365_source.html#l01566">tagDISPLAYINFO::hdcScreen</a>, <a class="el" href="a00371_source.html#l00028">RIP_ERROR</a>, <a class="el" href="a00371_source.html#l00030">RIP_VERBOSE</a>, <a class="el" href="a00371_source.html#l00029">RIP_WARNING</a>, <a class="el" href="a00371_source.html#l00131">RIPMSG0</a>, <a class="el" href="a00371_source.html#l00125">RIPNTERR0</a>, <a class="el" href="a00365_source.html#l01550">tagPHYSICAL_DEV_INFO::stateFlags</a>, <a class="el" href="a00950_source.html#l00117">UserAssert</a>, <a class="el" href="a00665_source.html#l01758">UserBuildDevmodeList()</a>, <a class="el" href="a00665_source.html#l01721">UserFreeDevice()</a>, <a class="el" href="a00665_source.html#l01451">UserGetDeviceFromName()</a> , 以及 <a class="el" href="a00665_source.html#l00799">UserGetDisplayDriverParameters()</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l02945">InitLoadDriver()</a>, <a class="el" href="a03614_source.html#l00821">NtUserCreateDesktop()</a>, <a class="el" href="a00689_source.html#l01097">UserChangeDisplaySettings()</a> , 以及 <a class="el" href="a00665_source.html#l02654">UserCreateExclusiveDC()</a>.</p>
</div>
</div>
<a id="af58d084fab4188005b01c976f76bbefa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af58d084fab4188005b01c976f76bbefa">&#9670;&nbsp;</a></span>UserBuildDevmodeList()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">VOID UserBuildDevmodeList </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00365.html#a705d19f394c3e5adfaf34b991bd255b2">PPHYSICAL_DEV_INFO</a>&#160;</td>
<td class="paramname"><em>physinfo</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l01758">1758</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160;{</div>
<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160; </div>
<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160; UNICODE_STRING us;</div>
<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160; LPWSTR lpdisplayNames = NULL;</div>
<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160; LPWSTR lpdisplay;</div>
<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160; </div>
<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160; <a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a> cbOutputSize;</div>
<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160; LPDEVMODEW tmpBuffer;</div>
<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160; PBYTE reallocBuffer;</div>
<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160; </div>
<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; </div>
<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160;<span class="comment"> * Mirror devices do not report their modes</span></div>
<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160;<span class="comment"> * Any operation that requires matching the modes with the device</span></div>
<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160;<span class="comment"> * will fail.</span></div>
<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160; <span class="keywordflow">if</span> (physinfo-&gt;<a class="code" href="a02601.html#a65e861fd574d4b5dd70d500641b395e8">stateFlags</a> &amp; DISPLAY_DEVICE_MIRRORING_DRIVER) {</div>
<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160; </div>
<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160; <a class="code" href="a00371.html#a162a73e20dfabca084a3ebb4581631a8">UserAssert</a>(physinfo-&gt;<a class="code" href="a02601.html#a11272e040ff3989da159f50e88b7b8c6">cbdevmodeInfo</a> == 0);</div>
<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160; <a class="code" href="a00371.html#a162a73e20dfabca084a3ebb4581631a8">UserAssert</a>(physinfo-&gt;<a class="code" href="a02601.html#a1fe37d9234f46b11eab06dbfbafab7e9">devmodeInfo</a> == NULL);</div>
<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160; </div>
<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160; }</div>
<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160; </div>
<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160;<span class="comment"> * check if the information is cached already</span></div>
<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;<span class="comment"> * if not, then get the information from the drivers.</span></div>
<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;<span class="comment"> * NOTE : we may want to synchronize access to this list</span></div>
<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;<span class="comment"> * of modes so that we can dynamically update the list</span></div>
<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160;<span class="comment"> * when plug - and - play arrives.</span></div>
<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160;<span class="comment"> * NOTE : the list of text modes is built at boot time, and we depend</span></div>
<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;<span class="comment"> * on that list being valid if the physinfo is returned.</span></div>
<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160;<span class="comment"> * see InitLoadDriver().</span></div>
<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160; </div>
<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: BuildDevmode: Enter\n&quot;</span>));</div>
<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160; </div>
<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160; <span class="keywordflow">if</span> ( (physinfo-&gt;<a class="code" href="a02601.html#a11272e040ff3989da159f50e88b7b8c6">cbdevmodeInfo</a> == 0) &amp;&amp;</div>
<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160; (physinfo-&gt;<a class="code" href="a02601.html#a1fe37d9234f46b11eab06dbfbafab7e9">devmodeInfo</a> == NULL) ) {</div>
<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160; </div>
<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: BuildDevmode: Rebuild List\n&quot;</span>));</div>
<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160; </div>
<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160; RtlInitUnicodeString(&amp;us, &amp;(physinfo-&gt;<a class="code" href="a02601.html#a19e507bdf81c67304d8ba81c600ac0eb">szNtDeviceName</a>[0]));</div>
<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160; </div>
<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160; lpdisplayNames = <a class="code" href="a00665.html#a1178983eb56b481bd0bcb216f7d144cf">UserGetDisplayDriverNames</a>(&amp;us);</div>
<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160; </div>
<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160; <span class="keywordflow">if</span> (lpdisplayNames) {</div>
<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160; </div>
<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160; lpdisplay = lpdisplayNames;</div>
<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160; </div>
<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160;<span class="comment"> * For each Display Driver Name we have, call GDI to get the</span></div>
<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;<span class="comment"> * Devmode information.</span></div>
<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160;<span class="comment"> * If the driver returns zero, assume no modes available and</span></div>
<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160;<span class="comment"> * go on to the next driver.</span></div>
<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160;<span class="comment"> * use a large 60K buffer to call down to the driver</span></div>
<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160; </div>
<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160; tmpBuffer = UserAllocPoolWithQuota(0xFF00, TAG_SYSTEM);</div>
<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160; </div>
<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160; <span class="keywordflow">if</span> (tmpBuffer) {</div>
<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160; </div>
<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160; <span class="keywordflow">while</span> (*lpdisplay != UNICODE_NULL) {</div>
<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160; </div>
<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160; <span class="comment">// BUGBUG 64K may not be large enough - we may want</span></div>
<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160; <span class="comment">// to retry with a larger buffer !</span></div>
<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160; </div>
<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160; cbOutputSize = GreGetDriverModes(lpdisplay,</div>
<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160; (HANDLE)physinfo-&gt;<a class="code" href="a02601.html#a671c14f1e07dff0246711968044db9c4">pDeviceHandle</a>,</div>
<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160; 0xFF00,</div>
<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160; tmpBuffer);</div>
<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160; </div>
<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160; <span class="keywordflow">if</span> (cbOutputSize) {</div>
<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160; </div>
<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160; <span class="comment">// create a new buffer copy the old data into it</span></div>
<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160; <span class="comment">// and append the new data at the end - we want</span></div>
<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160; <span class="comment">// a continuous buffer for all the data.</span></div>
<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160; </div>
<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160; reallocBuffer = UserAllocPoolWithQuota(</div>
<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160; physinfo-&gt;<a class="code" href="a02601.html#a11272e040ff3989da159f50e88b7b8c6">cbdevmodeInfo</a> + cbOutputSize,</div>
<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; TAG_SYSTEM);</div>
<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160; </div>
<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160; <span class="keywordflow">if</span> (reallocBuffer) {</div>
<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160; </div>
<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160; <span class="keywordflow">if</span> (physinfo-&gt;<a class="code" href="a02601.html#a11272e040ff3989da159f50e88b7b8c6">cbdevmodeInfo</a>) {</div>
<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160; </div>
<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160; <span class="comment">// Copt the contents of the olf buffer</span></div>
<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160; <span class="comment">// and free it</span></div>
<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160; </div>
<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160; RtlCopyMemory(reallocBuffer,</div>
<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160; physinfo-&gt;<a class="code" href="a02601.html#a1fe37d9234f46b11eab06dbfbafab7e9">devmodeInfo</a>,</div>
<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160; physinfo-&gt;<a class="code" href="a02601.html#a11272e040ff3989da159f50e88b7b8c6">cbdevmodeInfo</a>);</div>
<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160; </div>
<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160; UserFreePool(physinfo-&gt;<a class="code" href="a02601.html#a1fe37d9234f46b11eab06dbfbafab7e9">devmodeInfo</a>);</div>
<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160; }</div>
<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160; </div>
<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160; RtlCopyMemory(reallocBuffer +</div>
<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160; physinfo-&gt;<a class="code" href="a02601.html#a11272e040ff3989da159f50e88b7b8c6">cbdevmodeInfo</a>,</div>
<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160; tmpBuffer,</div>
<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160; cbOutputSize);</div>
<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160; </div>
<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160; physinfo-&gt;<a class="code" href="a02601.html#a11272e040ff3989da159f50e88b7b8c6">cbdevmodeInfo</a> += cbOutputSize;</div>
<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160; physinfo-&gt;<a class="code" href="a02601.html#a1fe37d9234f46b11eab06dbfbafab7e9">devmodeInfo</a> = (PDEVMODEW) reallocBuffer;</div>
<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160; </div>
<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160; </div>
<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160; <a class="code" href="a00371.html#ae61d954062a9ece52e350e54cad9a23d">RIPERR0</a>(ERROR_INVALID_PARAMETER, <a class="code" href="a00371.html#a41f433389f20db57f042022a662e96de">RIP_WARNING</a>, <span class="stringliteral">&quot;EnumDisplaySettings failed realloc\n&quot;</span>);</div>
<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160; </div>
<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160; }</div>
<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160; </div>
<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160; </div>
<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160; <a class="code" href="a00371.html#ae61d954062a9ece52e350e54cad9a23d">RIPERR0</a>(ERROR_INVALID_PARAMETER, <a class="code" href="a00371.html#a41f433389f20db57f042022a662e96de">RIP_WARNING</a>, <span class="stringliteral">&quot;EnumDisplaySettings - display driver not present\n&quot;</span>);</div>
<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160; </div>
<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160; }</div>
<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160; </div>
<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160;<span class="comment"> * Go to the next name.</span></div>
<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160;<span class="comment"> * NOTE: Display driver names are a seried of</span></div>
<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160;<span class="comment"> * UNICODE_NULL terminated strings stored in a</span></div>
<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160;<span class="comment"> * REG_MULTI_SZ value, and therefore the end of</span></div>
<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160;<span class="comment"> * the list is denoted by two</span></div>
<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160;<span class="comment"> * consecutive UNICODE_NULL characters.</span></div>
<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160; </div>
<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160; <span class="keywordflow">while</span> (*lpdisplay != UNICODE_NULL) {</div>
<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160; lpdisplay++;</div>
<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160; }</div>
<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160; lpdisplay++;</div>
<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160; </div>
<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160; }</div>
<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160; </div>
<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160; UserFreePool(tmpBuffer);</div>
<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160; </div>
<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160; </div>
<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160; <a class="code" href="a00371.html#ae61d954062a9ece52e350e54cad9a23d">RIPERR0</a>(ERROR_INVALID_PARAMETER, <a class="code" href="a00371.html#a41f433389f20db57f042022a662e96de">RIP_WARNING</a>, <span class="stringliteral">&quot;EnumDisplaySettings Initial Alloc failed\n&quot;</span>);</div>
<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160; }</div>
<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160; </div>
<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160; UserFreePool(lpdisplayNames);</div>
<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160; }</div>
<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160; </div>
<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160; <span class="keywordflow">if</span> ( (physinfo-&gt;<a class="code" href="a02601.html#a11272e040ff3989da159f50e88b7b8c6">cbdevmodeInfo</a> == 0) &amp;&amp;</div>
<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160; (physinfo-&gt;<a class="code" href="a02601.html#a1fe37d9234f46b11eab06dbfbafab7e9">devmodeInfo</a> == NULL) ) {</div>
<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160; </div>
<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160; <a class="code" href="a00665.html#aa8b64103d379d1cc9e91a96db783aa63">UserLogDisplayDriverEvent</a>(MsgInvalidDisplayDriver);</div>
<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160; }</div>
<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160; </div>
<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160; </div>
<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: BuildDevmode: Use cached list\n&quot;</span>));</div>
<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160; </div>
<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160; }</div>
<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160; </div>
<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: BuildDevmode: Exit\n\n&quot;</span>));</div>
<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160; </div>
<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160; </div>
<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a00365_source.html#l01552">tagPHYSICAL_DEV_INFO::cbdevmodeInfo</a>, <a class="el" href="a00365_source.html#l01553">tagPHYSICAL_DEV_INFO::devmodeInfo</a>, <a class="el" href="a00563_source.html#l00175">DWORD</a>, <a class="el" href="a00365_source.html#l01546">tagPHYSICAL_DEV_INFO::pDeviceHandle</a>, <a class="el" href="a00371_source.html#l00029">RIP_WARNING</a>, <a class="el" href="a00371_source.html#l00119">RIPERR0</a>, <a class="el" href="a00365_source.html#l01550">tagPHYSICAL_DEV_INFO::stateFlags</a>, <a class="el" href="a00365_source.html#l01545">tagPHYSICAL_DEV_INFO::szNtDeviceName</a>, <a class="el" href="a00950_source.html#l00117">UserAssert</a>, <a class="el" href="a00665_source.html#l00554">UserGetDisplayDriverNames()</a> , 以及 <a class="el" href="a00665_source.html#l00643">UserLogDisplayDriverEvent()</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l04187">NtUserEnumDisplaySettings()</a> , 以及 <a class="el" href="a00665_source.html#l01977">ProbeAndCaptureDevmode()</a>.</p>
</div>
</div>
<a id="ad7c3f68db698140187a708775e0e3c0e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad7c3f68db698140187a708775e0e3c0e">&#9670;&nbsp;</a></span>UserCreateExclusiveDC()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">HDC UserCreateExclusiveDC </td>
<td>(</td>
<td class="paramtype">PUNICODE_STRING&#160;</td>
<td class="paramname"><em>pstrDeviceName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PDEVMODEW&#160;</td>
<td class="paramname"><em>pDevmode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PVOID *&#160;</td>
<td class="paramname"><em>ppDevice</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l02654">2654</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>&#160;{</div>
<div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>&#160; HDC hdc = NULL;</div>
<div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>&#160; BYTE DeviceName[256];</div>
<div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>&#160; ULONG Value;</div>
<div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>&#160; UNICODE_STRING unicodeString;</div>
<div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>&#160; UNICODE_STRING CaptDeviceName = *pstrDeviceName;</div>
<div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>&#160; </div>
<div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>&#160; <a class="code" href="a02601.html">PPHYSICAL_DEV_INFO</a> physinfo;</div>
<div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>&#160; HDEV hdev;</div>
<div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>&#160; PDEVICE_LOCK pDevLock;</div>
<div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>&#160; </div>
<div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>&#160; </div>
<div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: CreateExclusiveDC: Enter\n&quot;</span>));</div>
<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>&#160; </div>
<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>&#160; <span class="comment">// Attempt to get a handle to the kernel driver.</span></div>
<div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>&#160; <span class="comment">// NOTE: mess around with the name to get it the way USER</span></div>
<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>&#160; <span class="comment">// wants it !</span></div>
<div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>&#160; </div>
<div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>&#160; <span class="keywordflow">if</span> (pstrDeviceName-&gt;Length &gt; 250)</div>
<div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>&#160; {</div>
<div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>&#160; <a class="code" href="a00371.html#ae61d954062a9ece52e350e54cad9a23d">RIPERR0</a>(ERROR_INVALID_PARAMETER, <a class="code" href="a00371.html#a41f433389f20db57f042022a662e96de">RIP_WARNING</a>, <span class="stringliteral">&quot;UserInit: CreateExclusiveDC: Exit\n\n&quot;</span>);</div>
<div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>&#160; </div>
<div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>&#160; <span class="keywordflow">return</span> NULL;</div>
<div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>&#160; }</div>
<div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>&#160; </div>
<div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>&#160; <span class="comment">// First check if the prefix is right.</span></div>
<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>&#160; </div>
<div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>&#160; CaptDeviceName.Length = <span class="keyword">sizeof</span>(L<span class="stringliteral">&quot;\\\\.\\DISPLAY&quot;</span>) - <span class="keyword">sizeof</span>(UNICODE_NULL);</div>
<div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>&#160; </div>
<div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>&#160; RtlInitUnicodeString(&amp;unicodeString,</div>
<div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>&#160; L<span class="stringliteral">&quot;\\\\.\\DISPLAY&quot;</span>);</div>
<div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>&#160; </div>
<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>&#160; <span class="keywordflow">if</span> (RtlEqualUnicodeString(&amp;unicodeString,</div>
<div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>&#160; &amp;CaptDeviceName,</div>
<div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>&#160; FALSE))</div>
<div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>&#160; </div>
<div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>&#160; {</div>
<div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: CreateExclusiveDC: Generating device name\n&quot;</span>));</div>
<div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>&#160; </div>
<div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>&#160; <span class="comment">// Get the number of the video</span></div>
<div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>&#160; </div>
<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>&#160; CaptDeviceName = *pstrDeviceName;</div>
<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>&#160; CaptDeviceName.Buffer = (LPWSTR) (((PUCHAR)CaptDeviceName.Buffer) +</div>
<div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>&#160; <span class="keyword">sizeof</span>(L<span class="stringliteral">&quot;\\\\.\\DISPLAY&quot;</span>) -</div>
<div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>&#160; <span class="keyword">sizeof</span>(UNICODE_NULL));</div>
<div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>&#160; </div>
<div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>&#160; CaptDeviceName.Length -= (<span class="keyword">sizeof</span>(L<span class="stringliteral">&quot;\\\\.\\DISPLAY&quot;</span>) - <span class="keyword">sizeof</span>(UNICODE_NULL));</div>
<div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>&#160; </div>
<div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>&#160; RtlUnicodeStringToInteger(&amp;CaptDeviceName,</div>
<div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>&#160; 10,</div>
<div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>&#160; &amp;Value);</div>
<div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>&#160; </div>
<div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>&#160; <span class="comment">// Put the prefix of the new string in the buffer.</span></div>
<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>&#160; </div>
<div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>&#160; </div>
<div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>&#160; RtlCopyMemory(DeviceName,</div>
<div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>&#160; L<span class="stringliteral">&quot;\\Device\\Video&quot;</span>,</div>
<div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>&#160; <span class="keyword">sizeof</span>(L<span class="stringliteral">&quot;\\Device\\Video&quot;</span>));</div>
<div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>&#160; </div>
<div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>&#160; <span class="comment">// Append the number at the end (number - 1 !!!)</span></div>
<div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>&#160; </div>
<div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>&#160; unicodeString.Buffer = (LPWSTR) (((PUCHAR)DeviceName) +</div>
<div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>&#160; <span class="keyword">sizeof</span>(L<span class="stringliteral">&quot;\\Device\\Video&quot;</span>) -</div>
<div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>&#160; <span class="keyword">sizeof</span>(UNICODE_NULL));</div>
<div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>&#160; unicodeString.Length =</div>
<div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>&#160; unicodeString.MaximumLength = 256;</div>
<div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>&#160; </div>
<div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>&#160; RtlIntegerToUnicodeString(Value - 1,</div>
<div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>&#160; 10,</div>
<div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>&#160; &amp;unicodeString);</div>
<div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>&#160; </div>
<div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>&#160; <span class="comment">// Reset the string size and pointer.</span></div>
<div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>&#160; </div>
<div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>&#160; unicodeString.Buffer = ((LPWSTR)DeviceName);</div>
<div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>&#160; unicodeString.Length += (<span class="keyword">sizeof</span>(L<span class="stringliteral">&quot;\\Device\\Video&quot;</span>) - <span class="keyword">sizeof</span>(UNICODE_NULL));</div>
<div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>&#160; </div>
<div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: CreateExclusiveDC: device Name %ws\n&quot;</span>, DeviceName));</div>
<div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>&#160; </div>
<div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>&#160;<span class="comment"> * Grab the User Crit since we are going to access User data</span></div>
<div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>&#160; <span class="comment">// EnterCrit();</span></div>
<div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>&#160; </div>
<div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>&#160;<span class="comment"> * Ask for the object exclusive.</span></div>
<div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>&#160; </div>
<div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>&#160; physinfo = <a class="code" href="a00665.html#a291aca25f546e197608f39e4887001a9">UserGetDeviceFromName</a>(&amp;unicodeString, USER_DEVICE_EXCLUSIVE);</div>
<div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>&#160; </div>
<div class="line"><a name="l02759"></a><span class="lineno"> 2759</span>&#160; <span class="keywordflow">if</span> (physinfo) {</div>
<div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>&#160; </div>
<div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>&#160; PDEVMODEW pCaptDevmode;</div>
<div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>&#160; </div>
<div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: CreateExclusiveDC: Got the display device handle\n&quot;</span>));</div>
<div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>&#160; </div>
<div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>&#160; <a class="code" href="a00371.html#a162a73e20dfabca084a3ebb4581631a8">UserAssert</a>(pDevmode != NULL);</div>
<div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>&#160; </div>
<div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>&#160; <span class="keywordflow">if</span> (NT_SUCCESS(<a class="code" href="a00665.html#a7f72492be72deb72088a46321f3703e9">ProbeAndCaptureDevmode</a>(&amp;unicodeString,</div>
<div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>&#160; &amp;pCaptDevmode,</div>
<div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>&#160; pDevmode,</div>
<div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>&#160; TRUE))) {</div>
<div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>&#160; </div>
<div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>&#160; hdev = <a class="code" href="a00665.html#a64f37a06db6b3bcaf0b9bb15887675e6">UserLoadDisplayDriver</a>(physinfo,</div>
<div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>&#160; &amp;unicodeString,</div>
<div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>&#160; NULL,</div>
<div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>&#160; pCaptDevmode,</div>
<div class="line"><a name="l02776"></a><span class="lineno"> 2776</span>&#160; FALSE,</div>
<div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>&#160; FALSE,</div>
<div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>&#160; &amp;pDevLock);</div>
<div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>&#160; </div>
<div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>&#160; <span class="keywordflow">if</span> (hdev)</div>
<div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>&#160; {</div>
<div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: CreateExclusiveDC: We have an hdev\n&quot;</span>));</div>
<div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>&#160; </div>
<div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>&#160; hdc = GreCreateDisplayDC(hdev, DCTYPE_DIRECT, FALSE);</div>
<div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>&#160; </div>
<div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>&#160; <span class="keywordflow">if</span> (hdc == NULL)</div>
<div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>&#160; {</div>
<div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: CreateExclusiveDC: Failed to get DC\n&quot;</span>));</div>
<div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>&#160; GreDestroyHDEV(hdev);</div>
<div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>&#160; }</div>
<div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>&#160; }</div>
<div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>&#160; </div>
<div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>&#160; UserFreePool(pCaptDevmode);</div>
<div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>&#160; }</div>
<div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>&#160; </div>
<div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>&#160; <span class="comment">// We may have to free the device manually if an error occured</span></div>
<div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>&#160; <span class="comment">// part way through</span></div>
<div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>&#160; <span class="comment">// After SetPhysicalDevice is done, Freeing the Device is done</span></div>
<div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>&#160; <span class="comment">// as part of the PDEV destructor</span></div>
<div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>&#160; </div>
<div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>&#160; <span class="keywordflow">if</span> (hdc == NULL)</div>
<div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>&#160; {</div>
<div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>&#160; <a class="code" href="a00665.html#ae1691bdb53d715053026f55f68e5d3f4">UserFreeDevice</a>(physinfo);</div>
<div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>&#160; *ppDevice = NULL;</div>
<div class="line"><a name="l02807"></a><span class="lineno"> 2807</span>&#160; }</div>
<div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>&#160; {</div>
<div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>&#160; *ppDevice = physinfo;</div>
<div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>&#160; }</div>
<div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>&#160; }</div>
<div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>&#160; </div>
<div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>&#160; <span class="comment">// LeaveCrit();</span></div>
<div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>&#160; }</div>
<div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>&#160; </div>
<div class="line"><a name="l02817"></a><span class="lineno"> 2817</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: CreateExclusiveDC: Exit\n\n&quot;</span>));</div>
<div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>&#160; </div>
<div class="line"><a name="l02819"></a><span class="lineno"> 2819</span>&#160; <span class="keywordflow">return</span> (hdc);</div>
<div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a00665_source.html#l01977">ProbeAndCaptureDevmode()</a>, <a class="el" href="a00371_source.html#l00029">RIP_WARNING</a>, <a class="el" href="a00371_source.html#l00119">RIPERR0</a>, <a class="el" href="a00950_source.html#l00117">UserAssert</a>, <a class="el" href="a00665_source.html#l01721">UserFreeDevice()</a>, <a class="el" href="a00665_source.html#l01451">UserGetDeviceFromName()</a> , 以及 <a class="el" href="a00665_source.html#l01326">UserLoadDisplayDriver()</a>.</p>
</div>
</div>
<a id="a2422a3691562e077c000f1f99148dba8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2422a3691562e077c000f1f99148dba8">&#9670;&nbsp;</a></span>UserCreateHDEV()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">HDEV UserCreateHDEV </td>
<td>(</td>
<td class="paramtype">PUNICODE_STRING&#160;</td>
<td class="paramname"><em>pstrDevice</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">LPDEVMODEW&#160;</td>
<td class="paramname"><em>lpdevmodeInformation</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00365.html#a705d19f394c3e5adfaf34b991bd255b2">PPHYSICAL_DEV_INFO</a> *&#160;</td>
<td class="paramname"><em>physdevinfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PDEVICE_LOCK *&#160;</td>
<td class="paramname"><em>pDevLock</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l02579">2579</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>&#160;{</div>
<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>&#160; </div>
<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>&#160; HDEV hdev = NULL;</div>
<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160; UNICODE_STRING us;</div>
<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160; <a class="code" href="a02601.html">PPHYSICAL_DEV_INFO</a> physinfo;</div>
<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160; </div>
<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: UserCreateHDEV: Enter\n&quot;</span>));</div>
<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>&#160; </div>
<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160;<span class="comment"> * Determine if we have a different device to deal with</span></div>
<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160; </div>
<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>&#160; physinfo = <a class="code" href="a00665.html#a291aca25f546e197608f39e4887001a9">UserGetDeviceFromName</a>(pstrDevice, USER_DEVICE_SHARED);</div>
<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>&#160; </div>
<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>&#160; <span class="keywordflow">if</span> (physinfo) {</div>
<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160; </div>
<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160;<span class="comment"> * Disable the old device since we may reprogramming the same piece</span></div>
<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>&#160;<span class="comment"> * of hardware</span></div>
<div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>&#160;<span class="comment"> * BUGBUG - this needs to be fixed, by determining with which piece</span></div>
<div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>&#160;<span class="comment"> * of hardware the VGA is assocaited to.</span></div>
<div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>&#160; </div>
<div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>&#160; bDisableDisplay(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a81f6c7e5df9c00e3f33e6e1a94ac75fc">hDev</a>);</div>
<div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>&#160; </div>
<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>&#160;<span class="comment"> * Get the list of diplay drivers for this kernel driver.</span></div>
<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>&#160; </div>
<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: UserCreateHDEV: Load Display Driver\n&quot;</span>));</div>
<div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>&#160; </div>
<div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>&#160; RtlInitUnicodeString(&amp;us, &amp;physinfo-&gt;<a class="code" href="a02601.html#a19e507bdf81c67304d8ba81c600ac0eb">szNtDeviceName</a>[0]);</div>
<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>&#160; </div>
<div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>&#160; hdev = <a class="code" href="a00665.html#a64f37a06db6b3bcaf0b9bb15887675e6">UserLoadDisplayDriver</a>(physinfo,</div>
<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>&#160; &amp;us,</div>
<div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>&#160; NULL,</div>
<div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>&#160; lpdevmodeInformation,</div>
<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>&#160; FALSE,</div>
<div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>&#160; FALSE,</div>
<div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>&#160; pDevLock);</div>
<div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>&#160; </div>
<div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>&#160; <span class="keywordflow">if</span> (hdev) {</div>
<div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>&#160; </div>
<div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>&#160; *physdevinfo = physinfo;</div>
<div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>&#160; </div>
<div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>&#160; </div>
<div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserCreatePDEV: *** FAILED ***\n&quot;</span>));</div>
<div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>&#160; </div>
<div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>&#160; <a class="code" href="a00656.html#a90ee9bcff7d18cc35574aa5a0b21d376">UserResetDisplayDevice</a>(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a81f6c7e5df9c00e3f33e6e1a94ac75fc">hDev</a>);</div>
<div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>&#160; </div>
<div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>&#160;<span class="comment"> * Release the handle to this device</span></div>
<div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>&#160; </div>
<div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160; <a class="code" href="a00665.html#ae1691bdb53d715053026f55f68e5d3f4">UserFreeDevice</a>(physinfo);</div>
<div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>&#160; }</div>
<div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>&#160; }</div>
<div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160; </div>
<div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: UserCreateHDEV: Exit\n\n&quot;</span>));</div>
<div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>&#160; </div>
<div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>&#160; <span class="keywordflow">return</span> hdev;</div>
<div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a03257_source.html#l00125">gpDispInfo</a>, <a class="el" href="a00365_source.html#l01576">tagDISPLAYINFO::hDev</a>, <a class="el" href="a00365_source.html#l01545">tagPHYSICAL_DEV_INFO::szNtDeviceName</a>, <a class="el" href="a00665_source.html#l01721">UserFreeDevice()</a>, <a class="el" href="a00665_source.html#l01451">UserGetDeviceFromName()</a>, <a class="el" href="a00665_source.html#l01326">UserLoadDisplayDriver()</a> , 以及 <a class="el" href="a00656_source.html#l02159">UserResetDisplayDevice()</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00656_source.html#l00947">xxxCreateDesktop2()</a>.</p>
</div>
</div>
<a id="a2d00e6c7566edba4539f45a026c4d150"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2d00e6c7566edba4539f45a026c4d150">&#9670;&nbsp;</a></span>UserDeleteExclusiveDC()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">VOID UserDeleteExclusiveDC </td>
<td>(</td>
<td class="paramtype">HDC&#160;</td>
<td class="paramname"><em>hdc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PVOID&#160;</td>
<td class="paramname"><em>pDevice</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l02832">2832</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>&#160;{</div>
<div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>&#160; <a class="code" href="a00899.html#ae451a2dc8791c420d7c956a63adc33ba">EnterCrit</a>();</div>
<div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>&#160; <a class="code" href="a00665.html#ae1691bdb53d715053026f55f68e5d3f4">UserFreeDevice</a>((<a class="code" href="a02601.html">PPHYSICAL_DEV_INFO</a>) pDevice);</div>
<div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>&#160; <a class="code" href="a00899.html#ac2181d07596893ed44d18aa267ce4d23">LeaveCrit</a>();</div>
<div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>&#160; </div>
<div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>&#160; </div>
<div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>&#160; hdc;</div>
<div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a00899.html#ae451a2dc8791c420d7c956a63adc33ba">EnterCrit()</a>, <a class="el" href="a00899.html#ac2181d07596893ed44d18aa267ce4d23">LeaveCrit()</a> , 以及 <a class="el" href="a00665_source.html#l01721">UserFreeDevice()</a>.</p>
</div>
</div>
<a id="a5f0c711ec59537d55a52988377290e3c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5f0c711ec59537d55a52988377290e3c">&#9670;&nbsp;</a></span>UserDestroyHDEV()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">VOID UserDestroyHDEV </td>
<td>(</td>
<td class="paramtype">HDEV&#160;</td>
<td class="paramname"><em>hdev</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l02566">2566</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160;{</div>
<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>&#160; GreDestroyHDEV(hdev);</div>
<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a9060b90d884ff96a08e71aec773de234"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9060b90d884ff96a08e71aec773de234">&#9670;&nbsp;</a></span>UserDriverExtraCallback()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">NTSTATUS UserDriverExtraCallback </td>
<td>(</td>
<td class="paramtype">PWSTR&#160;</td>
<td class="paramname"><em>ValueName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">ULONG&#160;</td>
<td class="paramname"><em>ValueType</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PVOID&#160;</td>
<td class="paramname"><em>ValueData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">ULONG&#160;</td>
<td class="paramname"><em>ValueLength</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PVOID&#160;</td>
<td class="paramname"><em>Context</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PVOID&#160;</td>
<td class="paramname"><em>EntryContext</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l00757">757</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;{</div>
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; </div>
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; PDEVMODEW pdevmode = (PDEVMODEW) EntryContext;</div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; </div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;<span class="comment"> * Put the driver extra data in the right place, if necessary.</span></div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; </div>
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; pdevmode-&gt;dmDriverExtra = min(pdevmode-&gt;dmDriverExtra, (USHORT)ValueLength);</div>
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; </div>
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; RtlMoveMemory(pdevmode+1,</div>
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; ValueData,</div>
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; pdevmode-&gt;dmDriverExtra);</div>
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; </div>
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keywordflow">return</span> STATUS_SUCCESS;</div>
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l00799">UserGetDisplayDriverParameters()</a>.</p>
</div>
</div>
<a id="ae1691bdb53d715053026f55f68e5d3f4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae1691bdb53d715053026f55f68e5d3f4">&#9670;&nbsp;</a></span>UserFreeDevice()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">VOID UserFreeDevice </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00365.html#a705d19f394c3e5adfaf34b991bd255b2">PPHYSICAL_DEV_INFO</a>&#160;</td>
<td class="paramname"><em>physInfo</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l01721">1721</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;{</div>
<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160; <span class="comment">// EnterCrit();</span></div>
<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160; </div>
<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160; <span class="keywordflow">if</span> (physInfo == NULL) {</div>
<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#afa5f32de88404289ec03cd2c0e61e94f">RIP_ERROR</a>, <span class="stringliteral">&quot;UserFreeDevice: Releasing a NULL Device!\n&quot;</span>);</div>
<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160; }</div>
<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160; </div>
<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160; <span class="keywordflow">if</span> (physInfo-&gt;<a class="code" href="a02601.html#a8ce83830b42b65fa6b57fbf904555e08">cOwnCount</a> == 0) {</div>
<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#afa5f32de88404289ec03cd2c0e61e94f">RIP_ERROR</a>, <span class="stringliteral">&quot;UserFreeDevice: Own count is NULL - device not owned !\n&quot;</span>);</div>
<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160; }</div>
<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160; </div>
<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; <span class="keywordflow">if</span> (--physInfo-&gt;<a class="code" href="a02601.html#a8ce83830b42b65fa6b57fbf904555e08">cOwnCount</a> == 0) {</div>
<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160; </div>
<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160; <span class="comment">// The device is no longer in use</span></div>
<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; </div>
<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160; physInfo-&gt;<a class="code" href="a02601.html#a2a9b923a44a5a1384ba6b845933e516c">DevOwned</a> = USER_DEVICE_NOTOWNED;</div>
<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; }</div>
<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; </div>
<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; <span class="comment">// LeaveCrit();</span></div>
<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a00365_source.html#l01549">tagPHYSICAL_DEV_INFO::cOwnCount</a>, <a class="el" href="a00365_source.html#l01548">tagPHYSICAL_DEV_INFO::DevOwned</a>, <a class="el" href="a00371_source.html#l00028">RIP_ERROR</a> , 以及 <a class="el" href="a00371_source.html#l00131">RIPMSG0</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00656_source.html#l00049">DesktopThread()</a>, <a class="el" href="a00665_source.html#l02945">InitLoadDriver()</a>, <a class="el" href="a00665_source.html#l04187">NtUserEnumDisplaySettings()</a>, <a class="el" href="a00665_source.html#l01977">ProbeAndCaptureDevmode()</a>, <a class="el" href="a00689_source.html#l01097">UserChangeDisplaySettings()</a>, <a class="el" href="a00665_source.html#l02654">UserCreateExclusiveDC()</a>, <a class="el" href="a00665_source.html#l02579">UserCreateHDEV()</a> , 以及 <a class="el" href="a00665_source.html#l02832">UserDeleteExclusiveDC()</a>.</p>
</div>
</div>
<a id="a291aca25f546e197608f39e4887001a9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a291aca25f546e197608f39e4887001a9">&#9670;&nbsp;</a></span>UserGetDeviceFromName()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="a00365.html#a705d19f394c3e5adfaf34b991bd255b2">PPHYSICAL_DEV_INFO</a> UserGetDeviceFromName </td>
<td>(</td>
<td class="paramtype">PUNICODE_STRING&#160;</td>
<td class="paramname"><em>pstrDeviceName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">ULONG&#160;</td>
<td class="paramname"><em>bShareState</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l01451">1451</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;{</div>
<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; ULONG i = 0;</div>
<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; NTSTATUS status;</div>
<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; <a class="code" href="a02601.html">PPHYSICAL_DEV_INFO</a> physInfo = NULL;</div>
<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; PFILE_OBJECT pFileObject = NULL;</div>
<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; PDEVICE_OBJECT pDeviceObject = NULL;</div>
<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; UNICODE_STRING uString;</div>
<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; </div>
<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetDev: Enter\n&quot;</span>));</div>
<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; </div>
<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;<span class="comment"> * passing in a NULL string means the default device should be used.</span></div>
<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; <span class="keywordflow">if</span> ((pstrDeviceName == NULL) || (pstrDeviceName-&gt;Buffer == NULL)) {</div>
<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; </div>
<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#afa5f32de88404289ec03cd2c0e61e94f">RIP_ERROR</a>, <span class="stringliteral">&quot;UserInit: GetDev: NULL name passed in - Exit\n\n&quot;</span>);</div>
<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; <span class="keywordflow">return</span> NULL;</div>
<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; }</div>
<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; </div>
<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;<span class="comment"> * Look for an existing handle in our handle table.</span></div>
<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;<span class="comment"> * Start by looking for the VGACOMPATIBLE string, which is</span></div>
<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;<span class="comment"> * our VgaCompatible device</span></div>
<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160; RtlInitUnicodeString(&amp;uString, L<span class="stringliteral">&quot;VGACOMPATIBLE&quot;</span>);</div>
<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; </div>
<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; <span class="keywordflow">if</span> (RtlEqualUnicodeString(pstrDeviceName,</div>
<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; &amp;uString,</div>
<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; TRUE)) {</div>
<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; </div>
<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;<span class="comment"> * This is the VGA device !.</span></div>
<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; </div>
<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; i = 0;</div>
<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; pDeviceObject = <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[0].<a class="code" href="a02601.html#a671c14f1e07dff0246711968044db9c4">pDeviceHandle</a>;</div>
<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; physInfo = &amp;<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[0];</div>
<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; </div>
<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; </div>
<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; <span class="keywordflow">for</span> (i = 1; i &lt; <a class="code" href="a03257.html#a5f96c779e6c723388217ee64122dbec5">cphysDevInfo</a>; i++) {</div>
<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; </div>
<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; RtlInitUnicodeString(&amp;uString, <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].szNtDeviceName);</div>
<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; </div>
<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; <span class="keywordflow">if</span> (RtlEqualUnicodeString(pstrDeviceName,</div>
<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; &amp;uString,</div>
<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; TRUE)) {</div>
<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; </div>
<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160;<span class="comment"> * We have the handle to this device.</span></div>
<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; </div>
<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; pDeviceObject = <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].<a class="code" href="a02601.html#a671c14f1e07dff0246711968044db9c4">pDeviceHandle</a>;</div>
<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; physInfo = &amp;<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i];</div>
<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; </div>
<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; }</div>
<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; }</div>
<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; }</div>
<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; </div>
<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; <span class="keywordflow">if</span> (physInfo == NULL) {</div>
<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; </div>
<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#a41f433389f20db57f042022a662e96de">RIP_WARNING</a>, <span class="stringliteral">&quot;UserDeviceFromName: Calling for a non-exsting device!\n&quot;</span>);</div>
<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; <span class="keywordflow">return</span> NULL;</div>
<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160; }</div>
<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160; </div>
<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;<span class="comment"> * NOTE:</span></div>
<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;<span class="comment"> * We depend on the value of &#39;i&#39; coming out of the loop in the case</span></div>
<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;<span class="comment"> * we the pDeviceObject is NULL.</span></div>
<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; </div>
<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetDev: Acquiring Device\n&quot;</span>));</div>
<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; </div>
<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; <span class="keywordflow">if</span> (pDeviceObject == NULL) {</div>
<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; </div>
<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;<span class="comment"> * Assume failure again by reseting phyinfo to NULL.</span></div>
<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;<span class="comment"> * work off the index &#39;i&#39; in the gphysinfo array.</span></div>
<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; physInfo = NULL;</div>
<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; </div>
<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;<span class="comment"> * If we are looking for the VGA device (i == 0), and the handle was</span></div>
<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;<span class="comment"> * NULL we can not really initialize it at this point. It may just not</span></div>
<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;<span class="comment"> * exist. So that will simply fail.</span></div>
<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;<span class="comment"> * Try to open any other device</span></div>
<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; <span class="keywordflow">if</span> (i != 0) {</div>
<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; </div>
<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; HANDLE hkRegistry;</div>
<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; NTSTATUS Status;</div>
<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; ULONG vgaCompat = 0;</div>
<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; ULONG defaultValue = 0;</div>
<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; ULONG multiDriver = 0;</div>
<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; ULONG mirroring = 0;</div>
<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; </div>
<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;<span class="comment"> * No one owns this device. Let&#39;s try to open it.</span></div>
<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160;<span class="comment"> /*</span></div>
<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160;<span class="comment"> * Get the sofware configuration data for this driver from</span></div>
<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;<span class="comment"> * the registry, and store it in the physinfo.</span></div>
<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; hkRegistry = <a class="code" href="a00665.html#ae157271d2738ad5440f4428d44232e65">UserGetRegistryHandleFromDeviceMap</a>(</div>
<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; pstrDeviceName,</div>
<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; <a class="code" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa58218890fafaa0643a59e9294a9843d0">DispDriverRegGlobal</a>,</div>
<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; FALSE,</div>
<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; &amp;Status);</div>
<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; <span class="keywordflow">if</span> (hkRegistry) {</div>
<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; </div>
<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; RTL_QUERY_REGISTRY_TABLE multiQueryTable[] = {</div>
<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; {NULL, RTL_QUERY_REGISTRY_DIRECT, <a class="code" href="a00665.html#a5de8fc19f0066ed30a41b9c0ef4d4deb">SoftwareSettings</a>[0],</div>
<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; &amp;multiDriver, REG_DWORD, &amp;defaultValue, 4},</div>
<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; {NULL, RTL_QUERY_REGISTRY_DIRECT, <a class="code" href="a00665.html#a5de8fc19f0066ed30a41b9c0ef4d4deb">SoftwareSettings</a>[1],</div>
<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; &amp;mirroring, REG_DWORD, &amp;defaultValue, 4},</div>
<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; {NULL, RTL_QUERY_REGISTRY_DIRECT, <a class="code" href="a00665.html#a5de8fc19f0066ed30a41b9c0ef4d4deb">SoftwareSettings</a>[2],</div>
<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; &amp;vgaCompat, REG_DWORD, &amp;defaultValue, 4},</div>
<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; {NULL, 0, NULL}</div>
<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; };</div>
<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; </div>
<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; RtlQueryRegistryValues(RTL_REGISTRY_HANDLE,</div>
<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; (PWSTR)hkRegistry,</div>
<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; &amp;multiQueryTable[0],</div>
<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; NULL,</div>
<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; NULL);</div>
<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; </div>
<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; ZwClose(hkRegistry);</div>
<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; </div>
<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; <span class="keywordflow">if</span> (multiDriver)</div>
<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].<a class="code" href="a02601.html#a65e861fd574d4b5dd70d500641b395e8">stateFlags</a> |= DISPLAY_DEVICE_MULTI_DRIVER;</div>
<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; <span class="keywordflow">if</span> (mirroring)</div>
<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].<a class="code" href="a02601.html#a65e861fd574d4b5dd70d500641b395e8">stateFlags</a> |= DISPLAY_DEVICE_MIRRORING_DRIVER;</div>
<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; <span class="keywordflow">if</span> (vgaCompat)</div>
<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].<a class="code" href="a02601.html#a65e861fd574d4b5dd70d500641b395e8">stateFlags</a> |= <a class="code" href="a00665.html#a2ccdbdde9498b06c48c5eca065b9a1fd">DISPLAY_DEVICE_VGA_COMPATIBLE</a>;</div>
<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; </div>
<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetDev: Display driver is %sa multi display driver\n&quot;</span>,</div>
<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; multiDriver ? <span class="stringliteral">&quot;&quot;</span> : <span class="stringliteral">&quot;NOT &quot;</span>));</div>
<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetDev: Display driver is %smirroring the desktop\n&quot;</span>,</div>
<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; mirroring ? <span class="stringliteral">&quot;&quot;</span> : <span class="stringliteral">&quot;NOT &quot;</span>));</div>
<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetDev: Display driver is %sVga Compatible\n&quot;</span>,</div>
<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; vgaCompat ? <span class="stringliteral">&quot;&quot;</span> : <span class="stringliteral">&quot;NOT &quot;</span>));</div>
<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; </div>
<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;<span class="comment"> * Opening a new device will however cause The Initialize</span></div>
<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;<span class="comment"> * routine of a miniport driver to be called.</span></div>
<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160;<span class="comment"> * This may cause the driver to change some state, which could</span></div>
<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160;<span class="comment"> * affect the state of another driver on the same device</span></div>
<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160;<span class="comment"> * (opening the weitek driver if the vga is running.</span></div>
<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;<span class="comment"> * For that reason, the other device should be temporarily</span></div>
<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;<span class="comment"> * closed down when we do the create, and then reinitialized</span></div>
<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;<span class="comment"> * afterwards.</span></div>
<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160;<span class="comment"> * Handle special case when we are opening initial device and</span></div>
<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;<span class="comment"> * gpDispInfo-&gt;hDev does not exist yet.</span></div>
<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a81f6c7e5df9c00e3f33e6e1a94ac75fc">hDev</a>) {</div>
<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetDev: Disabling Global Device\n&quot;</span>));</div>
<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; bDisableDisplay(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a81f6c7e5df9c00e3f33e6e1a94ac75fc">hDev</a>);</div>
<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; }</div>
<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160; </div>
<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160; status = IoGetDeviceObjectPointer(pstrDeviceName,</div>
<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160; (ACCESS_MASK) (0),</div>
<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160; &amp;pFileObject,</div>
<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160; &amp;pDeviceObject);</div>
<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; </div>
<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetDev: GetDeviceObject on %ws: returned %08lx\n&quot;</span>,</div>
<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; pstrDeviceName-&gt;Buffer, pDeviceObject));</div>
<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; </div>
<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; <span class="keywordflow">if</span> (NT_SUCCESS(status)) {</div>
<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; </div>
<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;<span class="comment"> * This is a valid device.</span></div>
<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].<a class="code" href="a02601.html#a671c14f1e07dff0246711968044db9c4">pDeviceHandle</a> = pDeviceObject;</div>
<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i].<a class="code" href="a02601.html#ad199e09483960703c70d31130d1a6cf9">pFileObject</a> = pFileObject;</div>
<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; </div>
<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; physInfo = &amp;<a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>[i];</div>
<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; </div>
<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; }</div>
<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; </div>
<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a81f6c7e5df9c00e3f33e6e1a94ac75fc">hDev</a>) {</div>
<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetDev: Re-enabling global device\n&quot;</span>));</div>
<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; <a class="code" href="a00656.html#a90ee9bcff7d18cc35574aa5a0b21d376">UserResetDisplayDevice</a>(<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#a81f6c7e5df9c00e3f33e6e1a94ac75fc">hDev</a>);</div>
<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; }</div>
<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; }</div>
<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; }</div>
<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; }</div>
<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; </div>
<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; </div>
<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;<span class="comment"> * If we are getting the handle, don&#39;t let an exclusive request</span></div>
<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160;<span class="comment"> * get an exclusive handle</span></div>
<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; </div>
<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; <span class="keywordflow">if</span> (physInfo) {</div>
<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; </div>
<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160;<span class="comment"> * Getting a NOTOWNED handle always succeeds</span></div>
<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; <span class="keywordflow">if</span> (bShareState != USER_DEVICE_NOTOWNED) {</div>
<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160; </div>
<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; <span class="keywordflow">if</span> (physInfo-&gt;<a class="code" href="a02601.html#a2a9b923a44a5a1384ba6b845933e516c">DevOwned</a> == USER_DEVICE_EXCLUSIVE) {</div>
<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; </div>
<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160;<span class="comment"> * Oops - failiure</span></div>
<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#afa5f32de88404289ec03cd2c0e61e94f">RIP_ERROR</a>, <span class="stringliteral">&quot;UserGetDeviceFromName: Exclusive request on already exclusive device\n&quot;</span>);</div>
<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; physInfo = NULL;</div>
<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; </div>
<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; </div>
<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; <span class="keywordflow">if</span> (bShareState == USER_DEVICE_EXCLUSIVE) {</div>
<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; </div>
<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; <span class="keywordflow">if</span> (physInfo-&gt;<a class="code" href="a02601.html#a2a9b923a44a5a1384ba6b845933e516c">DevOwned</a> == USER_DEVICE_SHARED) {</div>
<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; </div>
<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160;<span class="comment"> * Oops - failiure</span></div>
<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#afa5f32de88404289ec03cd2c0e61e94f">RIP_ERROR</a>, <span class="stringliteral">&quot;UserGetDeviceFromName: Exclusive request on already exclusive device\n&quot;</span>);</div>
<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; physInfo = NULL;</div>
<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; </div>
<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; </div>
<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160;<span class="comment"> * Mark the object as now being owned exclusively.</span></div>
<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; physInfo-&gt;<a class="code" href="a02601.html#a2a9b923a44a5a1384ba6b845933e516c">DevOwned</a> = USER_DEVICE_EXCLUSIVE;</div>
<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; }</div>
<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; </div>
<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; </div>
<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;<span class="comment"> * Mark it as being owned, but shared (so we can create multiple</span></div>
<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160;<span class="comment"> * desktops on it.</span></div>
<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; physInfo-&gt;<a class="code" href="a02601.html#a2a9b923a44a5a1384ba6b845933e516c">DevOwned</a> = USER_DEVICE_SHARED;</div>
<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; }</div>
<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; }</div>
<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; }</div>
<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; }</div>
<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; </div>
<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; <span class="keywordflow">if</span> (physInfo) {</div>
<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160;<span class="comment"> * If the device was acquired properly, increment the share</span></div>
<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160;<span class="comment"> * refcount</span></div>
<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160; physInfo-&gt;<a class="code" href="a02601.html#a8ce83830b42b65fa6b57fbf904555e08">cOwnCount</a>++;</div>
<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160; }</div>
<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160; </div>
<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetDev: Exit\n\n&quot;</span>));</div>
<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160; </div>
<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160; <span class="keywordflow">return</span> physInfo;</div>
<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; </div>
<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a00365_source.html#l01549">tagPHYSICAL_DEV_INFO::cOwnCount</a>, <a class="el" href="a03257_source.html#l00105">cphysDevInfo</a>, <a class="el" href="a00365_source.html#l01548">tagPHYSICAL_DEV_INFO::DevOwned</a>, <a class="el" href="a00665_source.html#l00031">DispDriverRegGlobal</a>, <a class="el" href="a00665_source.html#l00059">DISPLAY_DEVICE_VGA_COMPATIBLE</a>, <a class="el" href="a03257_source.html#l00125">gpDispInfo</a>, <a class="el" href="a03257_source.html#l00095">gphysDevInfo</a>, <a class="el" href="a00365_source.html#l01576">tagDISPLAYINFO::hDev</a>, <a class="el" href="a00365_source.html#l01546">tagPHYSICAL_DEV_INFO::pDeviceHandle</a>, <a class="el" href="a00365_source.html#l01547">tagPHYSICAL_DEV_INFO::pFileObject</a>, <a class="el" href="a00371_source.html#l00028">RIP_ERROR</a>, <a class="el" href="a00371_source.html#l00029">RIP_WARNING</a>, <a class="el" href="a00371_source.html#l00131">RIPMSG0</a>, <a class="el" href="a00665_source.html#l00750">SoftwareSettings</a>, <a class="el" href="a00365_source.html#l01550">tagPHYSICAL_DEV_INFO::stateFlags</a>, <a class="el" href="a00665_source.html#l00249">UserGetRegistryHandleFromDeviceMap()</a> , 以及 <a class="el" href="a00656_source.html#l02159">UserResetDisplayDevice()</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l02945">InitLoadDriver()</a>, <a class="el" href="a00665_source.html#l04187">NtUserEnumDisplaySettings()</a>, <a class="el" href="a00665_source.html#l01977">ProbeAndCaptureDevmode()</a>, <a class="el" href="a00689_source.html#l01097">UserChangeDisplaySettings()</a>, <a class="el" href="a00665_source.html#l02654">UserCreateExclusiveDC()</a> , 以及 <a class="el" href="a00665_source.html#l02579">UserCreateHDEV()</a>.</p>
</div>
</div>
<a id="a1178983eb56b481bd0bcb216f7d144cf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1178983eb56b481bd0bcb216f7d144cf">&#9670;&nbsp;</a></span>UserGetDisplayDriverNames()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">LPWSTR UserGetDisplayDriverNames </td>
<td>(</td>
<td class="paramtype">PUNICODE_STRING&#160;</td>
<td class="paramname"><em>deviceName</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l00554">554</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;{</div>
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; RTL_QUERY_REGISTRY_TABLE QueryTable[3];</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a> status;</div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a> cb = 0;</div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; LPWSTR lpdisplay = NULL;</div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; HANDLE hRegistry;</div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; </div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">if</span> (hRegistry = <a class="code" href="a00665.html#ae157271d2738ad5440f4428d44232e65">UserGetRegistryHandleFromDeviceMap</a>(deviceName,</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <a class="code" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa58218890fafaa0643a59e9294a9843d0">DispDriverRegGlobal</a>,</div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; FALSE,</div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; NULL)) {</div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; </div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;<span class="comment"> * Initialize the registry query table.</span></div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;<span class="comment"> * Note : We specify NO_EXPAND so we can get a REG_MULTI_SZ back</span></div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;<span class="comment"> * instead of multiple calls back with an REG_SZ</span></div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; QueryTable[0].QueryRoutine = <a class="code" href="a00665.html#a368e1b12420426ae8aaea867a5a40c98">__EnumDisplayQueryRoutine</a>;</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; QueryTable[0].Flags = RTL_QUERY_REGISTRY_REQUIRED |</div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; RTL_QUERY_REGISTRY_NOEXPAND;</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; QueryTable[0].Name = (PWSTR)L<span class="stringliteral">&quot;InstalledDisplayDrivers&quot;</span>;</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; QueryTable[0].EntryContext = &amp;cb;</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; QueryTable[0].DefaultType = REG_NONE;</div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; QueryTable[0].DefaultData = NULL;</div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; QueryTable[0].DefaultLength = 0;</div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; </div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; QueryTable[1].QueryRoutine = NULL;</div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; QueryTable[1].Flags = 0;</div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; QueryTable[1].Name = NULL;</div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; </div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;<span class="comment"> * Set the number of required bytes to zero and query the</span></div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;<span class="comment"> * registry.</span></div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; cb = 0;</div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; status = RtlQueryRegistryValues(RTL_REGISTRY_HANDLE,</div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; (PWSTR)hRegistry,</div>
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; &amp;QueryTable[0],</div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; NULL,</div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; NULL);</div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; </div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;<span class="comment"> * If the specified key was found and has a value, then</span></div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;<span class="comment"> * allocate a buffer for the data and query the registry</span></div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;<span class="comment"> * again to get the actual data.</span></div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keywordflow">if</span> (cb != 0) {</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; </div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">if</span> (lpdisplay = (LPWSTR)UserAllocPoolWithQuota(cb, TAG_SYSTEM)) {</div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; </div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; status = RtlQueryRegistryValues(RTL_REGISTRY_HANDLE,</div>
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; (PWSTR)hRegistry,</div>
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; &amp;QueryTable[0],</div>
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; lpdisplay,</div>
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; NULL);</div>
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; </div>
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keywordflow">if</span> (!NT_SUCCESS(status)) {</div>
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; </div>
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; UserFreePool(lpdisplay);</div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; lpdisplay = NULL;</div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; }</div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; }</div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; </div>
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <a class="code" href="a00371.html#a31aafffb49dfe98bdc749c9b35c90162">RIPMSG1</a>(<a class="code" href="a00371.html#afa5f32de88404289ec03cd2c0e61e94f">RIP_ERROR</a>, <span class="stringliteral">&quot;No installed display driver: status = %08lx\n&quot;</span>, status);</div>
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; }</div>
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; </div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; ZwClose(hRegistry);</div>
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; }</div>
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; </div>
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keywordflow">return</span> lpdisplay;</div>
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a00665_source.html#l00515">__EnumDisplayQueryRoutine()</a>, <a class="el" href="a00665_source.html#l00031">DispDriverRegGlobal</a>, <a class="el" href="a00563_source.html#l00175">DWORD</a>, <a class="el" href="a00371_source.html#l00028">RIP_ERROR</a>, <a class="el" href="a00371_source.html#l00132">RIPMSG1</a> , 以及 <a class="el" href="a00665_source.html#l00249">UserGetRegistryHandleFromDeviceMap()</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l01758">UserBuildDevmodeList()</a> , 以及 <a class="el" href="a00665_source.html#l01326">UserLoadDisplayDriver()</a>.</p>
</div>
</div>
<a id="a1496fe4e3afa850f6bd625b0c3542b78"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1496fe4e3afa850f6bd625b0c3542b78">&#9670;&nbsp;</a></span>UserGetDisplayDriverParameters()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">NTSTATUS UserGetDisplayDriverParameters </td>
<td>(</td>
<td class="paramtype">PUNICODE_STRING&#160;</td>
<td class="paramname"><em>deviceName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PDEVMODEW&#160;</td>
<td class="paramname"><em>pdevmode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">BOOL&#160;</td>
<td class="paramname"><em>bEmptyDevmode</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l00799">799</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;{</div>
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; ULONG i;</div>
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; ULONG k;</div>
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; NTSTATUS retStatus;</div>
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; HANDLE hkRegistry;</div>
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; </div>
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <a class="code" href="a00665.html#a01e58bda8aaf9059fe3ffa0ddd55567b">DISP_DRIVER_REGISTRY_TYPE</a> registryParam;</div>
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a> nullValue = 0;</div>
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; </div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160;<span class="comment"> * Our current algorithm is to save or get things from the hardware profile</span></div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160;<span class="comment"> * first, and then try the global profile as a backup.</span></div>
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160;<span class="comment"> * NOTE ??? For saving, should we always back propagate the changes to the</span></div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;<span class="comment"> * global settings also ? We do this at this point.</span></div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; </div>
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; RTL_QUERY_REGISTRY_TABLE QueryTable[9] = {</div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; </div>
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; {NULL, RTL_QUERY_REGISTRY_DIRECT, NULL, &amp;pdevmode-&gt;dmBitsPerPel,</div>
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; REG_NONE, NULL, 0},</div>
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; </div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; {NULL, RTL_QUERY_REGISTRY_DIRECT, NULL, &amp;pdevmode-&gt;dmPelsWidth,</div>
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; REG_NONE, NULL, 0},</div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; </div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; {NULL, RTL_QUERY_REGISTRY_DIRECT, NULL, &amp;pdevmode-&gt;dmPelsHeight,</div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; REG_NONE, NULL, 0},</div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; </div>
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; {NULL, RTL_QUERY_REGISTRY_DIRECT, NULL, &amp;pdevmode-&gt;dmDisplayFrequency,</div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; REG_NONE, NULL, 0},</div>
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; </div>
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; {NULL, RTL_QUERY_REGISTRY_DIRECT, NULL, &amp;pdevmode-&gt;dmDisplayFlags,</div>
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; REG_NONE, NULL, 0},</div>
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; </div>
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; {NULL, RTL_QUERY_REGISTRY_DIRECT, NULL, &amp;pdevmode-&gt;dmPanningWidth,</div>
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; REG_NONE, NULL, 0},</div>
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; </div>
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; {NULL, RTL_QUERY_REGISTRY_DIRECT, NULL, &amp;pdevmode-&gt;dmPanningHeight,</div>
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; REG_NONE, NULL, 0},</div>
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; </div>
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="comment">// if the value is not there, we want the call to succeed anyway.</span></div>
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="comment">// so specify a vlue that is NULL modulo 64K !</span></div>
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; </div>
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; {<a class="code" href="a00665.html#a9060b90d884ff96a08e71aec773de234">UserDriverExtraCallback</a>, 0, NULL, pdevmode,</div>
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; REG_DWORD, &amp;nullValue, 0x10000},</div>
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; </div>
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; {NULL, 0, NULL}</div>
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; };</div>
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; </div>
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetDriverParams\n&quot;</span>));</div>
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; </div>
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160;<span class="comment"> * Special debug code to ensure that anyone who calls this API</span></div>
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160;<span class="comment"> * knows what they are doing, and we don&#39;t end up in here with a</span></div>
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160;<span class="comment"> * &quot;random&quot; devmode that does not ensure sizes.</span></div>
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; </div>
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <a class="code" href="a00371.html#a162a73e20dfabca084a3ebb4581631a8">UserAssert</a>(pdevmode-&gt;dmSize == 0xDDDD);</div>
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; </div>
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160;<span class="comment"> * If there is no place for the Driver Extra data, don&#39;t ask for it.</span></div>
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160;<span class="comment"> * This will just cause the code not to read that value</span></div>
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; </div>
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <span class="keywordflow">if</span> (pdevmode-&gt;dmDriverExtra == 0) {</div>
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; </div>
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; QueryTable[7].Flags = 0;</div>
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; pdevmode-&gt;dmDriverExtra = 0;</div>
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; }</div>
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; </div>
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160;<span class="comment"> * We assume that the DEVMODE was previously zeroed out by the caller</span></div>
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; </div>
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; retStatus = STATUS_SUCCESS;</div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; </div>
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="keywordflow">if</span> (bEmptyDevmode) {</div>
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; </div>
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160;<span class="comment"> * We want an empty DEVMODE (except for the LogPixels).</span></div>
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; </div>
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetDriverParams: Default (empty) DEVMODE\n&quot;</span>));</div>
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; </div>
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; RtlZeroMemory(pdevmode, <span class="keyword">sizeof</span>(DEVMODEW));</div>
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; </div>
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; </div>
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160;<span class="preprocessor">#if 0</span></div>
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160;<span class="comment"> * Let&#39;s try to get the per-user settings first.</span></div>
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; </div>
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetDriverParams: USER Settings\n&quot;</span>));</div>
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; </div>
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="keywordflow">for</span> (i=0; i &lt; 8; i++)</div>
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; {</div>
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; QueryTable[i].Name = <a class="code" href="a00665.html#a2629889fd8bf33088b544b6c3128707a">DefaultSettings</a>[i];</div>
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; }</div>
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; </div>
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; retStatus = RtlQueryRegistryValues(RTL_REGISTRY_USER,</div>
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; NULL,</div>
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; &amp;QueryTable[0],</div>
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; NULL,</div>
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; NULL);</div>
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; <span class="keywordflow">if</span> (NT_SUCCESS(retStatus))</div>
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; </div>
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; </div>
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetDriverParams: Hardware Profile Settings\n&quot;</span>));</div>
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; </div>
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160;<span class="comment"> * try the hardware profile first and see if we can get parameters</span></div>
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160;<span class="comment"> * from that. If that fails, fall back to getting the system</span></div>
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160;<span class="comment"> * parameters.</span></div>
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; </div>
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; registryParam = <a class="code" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa5ce32297dc3f6df4e82c6e0790d30063">DispDriverRegHardwareProfile</a>;</div>
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; </div>
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; <span class="keywordflow">for</span> (k=1; k&lt;=2; k++)</div>
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; {</div>
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; hkRegistry = <a class="code" href="a00665.html#ae157271d2738ad5440f4428d44232e65">UserGetRegistryHandleFromDeviceMap</a>(deviceName,</div>
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; registryParam,</div>
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; FALSE,</div>
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; NULL);</div>
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; </div>
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="keywordflow">if</span> (hkRegistry == NULL)</div>
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; {</div>
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetDriverParams: failed - registry could not be opened\n&quot;</span>));</div>
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; retStatus = STATUS_UNSUCCESSFUL;</div>
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; }</div>
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; {</div>
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <span class="keywordflow">for</span> (i=0; i &lt; 8; i++)</div>
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; {</div>
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; QueryTable[i].Name = <a class="code" href="a00665.html#a2629889fd8bf33088b544b6c3128707a">DefaultSettings</a>[i];</div>
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; }</div>
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; </div>
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; retStatus = RtlQueryRegistryValues(RTL_REGISTRY_HANDLE,</div>
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; (PWSTR)hkRegistry,</div>
<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; &amp;QueryTable[0],</div>
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; NULL,</div>
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; NULL);</div>
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; </div>
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; ZwClose(hkRegistry);</div>
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; }</div>
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; </div>
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160;<span class="comment"> * If something failed for the hardware profile, try</span></div>
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160;<span class="comment"> * to get the global settings</span></div>
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160;<span class="comment"> * If everything is OK, just exit the loop</span></div>
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; </div>
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <span class="keywordflow">if</span> (NT_SUCCESS(retStatus))</div>
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; {</div>
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; }</div>
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; {</div>
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetDriverParams: get hardware profile failed - try global settings\n&quot;</span>));</div>
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; registryParam = <a class="code" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa58218890fafaa0643a59e9294a9843d0">DispDriverRegGlobal</a>;</div>
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; }</div>
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; </div>
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; }</div>
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; </div>
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160;<span class="comment"> * Other common fields to the DEVMODEs</span></div>
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; </div>
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <span class="keywordflow">if</span> (NT_SUCCESS(retStatus))</div>
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; {</div>
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160;<span class="comment"> * Lets check if the DEVMODE we got is all NULLs (like when</span></div>
<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160;<span class="comment"> * the driver just got installed).</span></div>
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160;<span class="comment"> * If it is, the driver should be reconfigured</span></div>
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160;<span class="comment"> * We will only do this if we are NOT in BASVIDEO, since the VGA</span></div>
<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160;<span class="comment"> * BASEVIDEO driver need not be configured.</span></div>
<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; </div>
<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; <span class="keywordflow">if</span> ((pdevmode-&gt;dmBitsPerPel == 0) &amp;&amp;</div>
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; (pdevmode-&gt;dmPelsWidth == 0) &amp;&amp;</div>
<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; (pdevmode-&gt;dmPelsHeight == 0) &amp;&amp;</div>
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; (pdevmode-&gt;dmDisplayFrequency == 0) &amp;&amp;</div>
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; (pdevmode-&gt;dmDisplayFlags == 0) &amp;&amp;</div>
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; (<a class="code" href="a00665.html#a4f95d12ae9db57753d1ce7447479f0ee">gbBaseVideo</a> == FALSE))</div>
<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; {</div>
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; <a class="code" href="a00665.html#aa8b64103d379d1cc9e91a96db783aa63">UserLogDisplayDriverEvent</a>(MsgInvalidUsingDefaultMode);</div>
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; }</div>
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; }</div>
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; }</div>
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; </div>
<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160;<span class="comment"> * Let&#39;s fill out all the other fields of the DEVMODE that ALWAYS</span></div>
<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160;<span class="comment"> * need to be initialized.</span></div>
<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; </div>
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; <span class="keywordflow">if</span> (NT_SUCCESS(retStatus)) {</div>
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; </div>
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;<span class="comment"> * Set versions and size.</span></div>
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; </div>
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; pdevmode-&gt;dmSpecVersion = DM_SPECVERSION;</div>
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; pdevmode-&gt;dmDriverVersion = DM_SPECVERSION;</div>
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; pdevmode-&gt;dmSize = <span class="keyword">sizeof</span>(DEVMODEW);</div>
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; </div>
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;<span class="comment"> * Currently, the logpixel value should not be changed on the fly.</span></div>
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;<span class="comment"> * So once it has been read out of the registry at boot time, keep</span></div>
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;<span class="comment"> * that same value and ignore the registry.</span></div>
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; </div>
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#ad3e0b5376b5114f4269df20805a3a85e">cxPixelsPerInch</a>)</div>
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; {</div>
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; pdevmode-&gt;dmLogPixels = <a class="code" href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a>-&gt;<a class="code" href="a02605.html#ad3e0b5376b5114f4269df20805a3a85e">cxPixelsPerInch</a>;</div>
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; }</div>
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; {</div>
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;<span class="comment"> * Get the devices pelDPI out of the registry</span></div>
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; </div>
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; UNICODE_STRING us;</div>
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; OBJECT_ATTRIBUTES ObjectAttributes;</div>
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; NTSTATUS Status;</div>
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; HANDLE hKey;</div>
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a> cbSize;</div>
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; BYTE Buf[<span class="keyword">sizeof</span>(KEY_VALUE_PARTIAL_INFORMATION) + <span class="keyword">sizeof</span>(<a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a>)];</div>
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; </div>
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; pdevmode-&gt;dmLogPixels = 96;</div>
<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; </div>
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <span class="comment">// Look in the Hardware Profile for the current font size.</span></div>
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="comment">// If that fails, look in the global software location.</span></div>
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; </div>
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; RtlInitUnicodeString(&amp;us, L<span class="stringliteral">&quot;\\Registry\\Machine\\System&quot;</span></div>
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; L<span class="stringliteral">&quot;\\CurrentControlSet\\Hardware Profiles&quot;</span></div>
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; L<span class="stringliteral">&quot;\\Current\\Software\\Fonts&quot;</span>);</div>
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; </div>
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; InitializeObjectAttributes(&amp;ObjectAttributes,</div>
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; &amp;us,</div>
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; OBJ_CASE_INSENSITIVE,</div>
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; NULL,</div>
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; NULL);</div>
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; </div>
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; Status = ZwOpenKey(&amp;hKey, KEY_READ, &amp;ObjectAttributes);</div>
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; </div>
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <span class="keywordflow">if</span> (!NT_SUCCESS(Status)) {</div>
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; </div>
<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; RtlInitUnicodeString(&amp;us, L<span class="stringliteral">&quot;\\Registry\\Machine\\Software&quot;</span></div>
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; L<span class="stringliteral">&quot;\\Microsoft\\Windows NT&quot;</span></div>
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; L<span class="stringliteral">&quot;\\CurrentVersion\\FontDPI&quot;</span>);</div>
<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; </div>
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; InitializeObjectAttributes(&amp;ObjectAttributes,</div>
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; &amp;us,</div>
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; OBJ_CASE_INSENSITIVE,</div>
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; NULL,</div>
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; NULL);</div>
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; </div>
<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; Status = ZwOpenKey(&amp;hKey, KEY_READ, &amp;ObjectAttributes);</div>
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; }</div>
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; </div>
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; <span class="keywordflow">if</span> (NT_SUCCESS(Status)) {</div>
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; </div>
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; RtlInitUnicodeString(&amp;us, L<span class="stringliteral">&quot;LogPixels&quot;</span>);</div>
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; </div>
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; Status = ZwQueryValueKey(hKey,</div>
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; &amp;us,</div>
<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; KeyValuePartialInformation,</div>
<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; (PKEY_VALUE_PARTIAL_INFORMATION)Buf,</div>
<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; <span class="keyword">sizeof</span>(Buf),</div>
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; &amp;cbSize);</div>
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; </div>
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; <span class="keywordflow">if</span> (NT_SUCCESS(Status)) {</div>
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; </div>
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; pdevmode-&gt;dmLogPixels =</div>
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; *((PUSHORT)((PKEY_VALUE_PARTIAL_INFORMATION)Buf)-&gt;Data);</div>
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; }</div>
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; </div>
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; ZwClose(hKey);</div>
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; }</div>
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; </div>
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;<span class="comment"> * For non high-res mode, let&#39;s force small font size so</span></div>
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;<span class="comment"> * that various dialogs are not clipped out.</span></div>
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; </div>
<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <span class="comment">// if (pdevmode-&gt;dmPelsHeight &lt; 600) {</span></div>
<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <span class="comment">// pdevmode-&gt;dmLogPixels = 96;</span></div>
<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <span class="comment">// }</span></div>
<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; </div>
<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; }</div>
<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; </div>
<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; pdevmode-&gt;dmFields = <a class="code" href="a00665.html#a659e9e6483dce7cb60583d9b35f14de4">DM_INTERNAL_VALID_FLAGS</a>;</div>
<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; </div>
<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetDriverParams: DEVMODE\n&quot;</span>));</div>
<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; Size = %d\n&quot;</span>, pdevmode-&gt;dmSize));</div>
<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; Fields = %08lx\n&quot;</span>, pdevmode-&gt;dmFields));</div>
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; XResolution = %d\n&quot;</span>, pdevmode-&gt;dmPelsWidth));</div>
<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; YResolution = %d\n&quot;</span>, pdevmode-&gt;dmPelsHeight));</div>
<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; Bpp = %d\n&quot;</span>, pdevmode-&gt;dmBitsPerPel));</div>
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; Frequency = %d\n&quot;</span>, pdevmode-&gt;dmDisplayFrequency));</div>
<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; Flags = %d\n&quot;</span>, pdevmode-&gt;dmDisplayFlags));</div>
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; XPanning = %d\n&quot;</span>, pdevmode-&gt;dmPanningWidth));</div>
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; YPanning = %d\n&quot;</span>, pdevmode-&gt;dmPanningHeight));</div>
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; DPI = %d\n&quot;</span>, pdevmode-&gt;dmLogPixels));</div>
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; DriverExtra = %d&quot;</span>, pdevmode-&gt;dmDriverExtra));</div>
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; <span class="keywordflow">if</span> (pdevmode-&gt;dmDriverExtra) {</div>
<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; TRACE_INIT((<span class="stringliteral">&quot; - %08lx %08lx\n&quot;</span>,</div>
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; *(PULONG)(((PUCHAR)pdevmode)+pdevmode-&gt;dmSize),</div>
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; *(PULONG)(((PUCHAR)pdevmode)+pdevmode-&gt;dmSize + 4)));</div>
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;\n&quot;</span>));</div>
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; }</div>
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; </div>
<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; </div>
<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetSetParms: Get failed\n\n&quot;</span>));</div>
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; </div>
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; }</div>
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; </div>
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetDriverParams: Exit\n\n&quot;</span>));</div>
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; </div>
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <span class="keywordflow">return</span> (retStatus);</div>
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a00365_source.html#l01580">tagDISPLAYINFO::cxPixelsPerInch</a>, <a class="el" href="a00665_source.html#l00730">DefaultSettings</a>, <a class="el" href="a00665_source.html#l00031">DispDriverRegGlobal</a>, <a class="el" href="a00665_source.html#l00032">DispDriverRegHardwareProfile</a>, <a class="el" href="a00665_source.html#l00050">DM_INTERNAL_VALID_FLAGS</a>, <a class="el" href="a00563_source.html#l00175">DWORD</a>, <a class="el" href="a00665_source.html#l00045">gbBaseVideo</a>, <a class="el" href="a03257_source.html#l00125">gpDispInfo</a>, <a class="el" href="a00950_source.html#l00117">UserAssert</a>, <a class="el" href="a00665_source.html#l00757">UserDriverExtraCallback()</a>, <a class="el" href="a00665_source.html#l00249">UserGetRegistryHandleFromDeviceMap()</a> , 以及 <a class="el" href="a00665_source.html#l00643">UserLogDisplayDriverEvent()</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l02945">InitLoadDriver()</a>, <a class="el" href="a00665_source.html#l04187">NtUserEnumDisplaySettings()</a> , 以及 <a class="el" href="a00665_source.html#l01977">ProbeAndCaptureDevmode()</a>.</p>
</div>
</div>
<a id="ae157271d2738ad5440f4428d44232e65"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae157271d2738ad5440f4428d44232e65">&#9670;&nbsp;</a></span>UserGetRegistryHandleFromDeviceMap()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">HANDLE UserGetRegistryHandleFromDeviceMap </td>
<td>(</td>
<td class="paramtype">PUNICODE_STRING&#160;</td>
<td class="paramname"><em>deviceName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00665.html#a01e58bda8aaf9059fe3ffa0ddd55567b">DISP_DRIVER_REGISTRY_TYPE</a>&#160;</td>
<td class="paramname"><em>ParamType</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">BOOL&#160;</td>
<td class="paramname"><em>bMatchBaseVideo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PNTSTATUS&#160;</td>
<td class="paramname"><em>pStatus</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l00249">249</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;{</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; HANDLE hkRegistry = NULL;</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; </div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; UNICODE_STRING UnicodeString;</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; OBJECT_ATTRIBUTES ObjectAttributes;</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; NTSTATUS Status;</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; HANDLE handle;</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; ULONG cbStringSize;</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; </div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetHandleFromMap: Enter\n&quot;</span>));</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; </div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="comment"> * Initialize the handle</span></div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; </div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="comment"> * Start by opening the registry devicemap for video.</span></div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; </div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; RtlInitUnicodeString(&amp;UnicodeString,</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; L<span class="stringliteral">&quot;\\Registry\\Machine\\Hardware\\DeviceMap\\Video&quot;</span>);</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; </div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; InitializeObjectAttributes(&amp;ObjectAttributes,</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; &amp;UnicodeString,</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; OBJ_CASE_INSENSITIVE,</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; NULL,</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; NULL);</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; </div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; Status = ZwOpenKey(&amp;handle, KEY_READ, &amp;ObjectAttributes);</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; </div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">if</span> (NT_SUCCESS(Status)) {</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; </div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; WCHAR driverRegistryPath[256];</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; WCHAR fullRegistryPath[256];</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; </div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;<span class="comment"> * Get the name of the driver based on the device name.</span></div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; </div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; Status = ZwQueryValueKey(handle,</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; deviceName,</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; KeyValueFullInformation,</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; driverRegistryPath,</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; 512,</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; &amp;cbStringSize);</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; </div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">if</span> (NT_SUCCESS(Status)) {</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; </div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="comment">// Look up in the registry for the kernel driver node (it</span></div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="comment">// is a full path to the driver node) so we can get the</span></div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="comment">// display driver info.</span></div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; </div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; LPWSTR lpstrDriverRegistryPath;</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; LPWSTR lpstrEndPath;</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; UNICODE_STRING FullRegistryPath;</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; </div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="comment">// We can use wcsstr since we are guaranteed to find &quot;Services&quot;</span></div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="comment">// in the string, and we won&#39;t run off the end of the string.</span></div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; </div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; lpstrDriverRegistryPath = wcsstr((LPWSTR)((PUCHAR)driverRegistryPath +</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; ((PKEY_VALUE_FULL_INFORMATION)driverRegistryPath)-&gt;DataOffset),</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; L<span class="stringliteral">&quot;\\Services&quot;</span>);</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; </div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="comment">// Determine if the device for which we have the handle is a</span></div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="comment">// BASEVIDEO device.</span></div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; </div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">if</span> (bMatchBaseVideo)</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; {</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetHandleFromMap: testing for basevideo device\n&quot;</span>));</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; </div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">if</span> ((_wcsicmp(L<span class="stringliteral">&quot;\\Services\\VgaSave\\Device0&quot;</span>, lpstrDriverRegistryPath)) &amp;&amp;</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; (_wcsicmp(L<span class="stringliteral">&quot;\\Services\\Vga\\Device0&quot;</span>, lpstrDriverRegistryPath)) )</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; {</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetHandleFromMap: basevideo match failed - Exit\n\n&quot;</span>));</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; </div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; ZwClose(handle);</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; </div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">if</span> (pStatus) {</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; *pStatus = STATUS_NO_SUCH_DEVICE;</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; }</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; </div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordflow">return</span> NULL;</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; }</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; }</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; </div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="comment">// Start composing the fully qualified path name.</span></div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; </div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; FullRegistryPath.Buffer = fullRegistryPath;</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; FullRegistryPath.Length = 0;</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; FullRegistryPath.MaximumLength = 255;</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; </div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; RtlAppendUnicodeToString(&amp;FullRegistryPath,</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; L<span class="stringliteral">&quot;\\Registry\\Machine\\System\\CurrentControlSet&quot;</span>);</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; </div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="comment">// If we want the hardware profile, insert the hardware profile</span></div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="comment">// in there</span></div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; </div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span> ((ParamType == <a class="code" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa5ce32297dc3f6df4e82c6e0790d30063">DispDriverRegHardwareProfile</a>) ||</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; (ParamType == <a class="code" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa01ae391162e54069de625bdc7049e934">DispDriverRegHardwareProfileCreate</a>))</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; {</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetHandleFromMap: using a hardware profile\n&quot;</span>));</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; RtlAppendUnicodeToString(&amp;FullRegistryPath,</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; L<span class="stringliteral">&quot;\\Hardware Profiles\\Current\\System\\CurrentControlSet&quot;</span>);</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; }</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; </div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="comment">// If we have the create Options, we have to create the subkeys</span></div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="comment">// otherwise, just open thekey</span></div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; </div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; InitializeObjectAttributes(&amp;ObjectAttributes,</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; &amp;FullRegistryPath,</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; OBJ_CASE_INSENSITIVE,</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; NULL,</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; NULL);</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; </div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="comment">// Check if the subkeys need to be created.</span></div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; </div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">if</span> (ParamType == <a class="code" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa01ae391162e54069de625bdc7049e934">DispDriverRegHardwareProfileCreate</a>)</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; {</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetHandleFromMap: creating a hardware profile\n&quot;</span>));</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; </div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="comment">// We are guaranteed to go through the loop at least once,</span></div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="comment">// which will ensure the status is set properly.</span></div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="comment">// Basically, find the &#39;\&#39; replace it by NULL and add that</span></div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">// partial string to the full path (so we can create that</span></div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="comment">// subkey), put back the &#39;\&#39; and keep on going for the next</span></div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="comment">// string. We must also add the end of the string.</span></div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; </div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordflow">do</span></div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; {</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; lpstrEndPath = wcschr(lpstrDriverRegistryPath + 1, L<span class="charliteral">&#39;\\&#39;</span>);</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; </div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">if</span> (lpstrEndPath != NULL) {</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; *lpstrEndPath = UNICODE_NULL;</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; }</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; </div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; RtlAppendUnicodeToString(&amp;FullRegistryPath,</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; lpstrDriverRegistryPath);</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; </div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="comment">// Close the previous key if necessary.</span></div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; </div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">if</span> (hkRegistry)</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; {</div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; ZwClose(hkRegistry);</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; }</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; </div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="comment">// Create the Key.</span></div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; </div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; Status = ZwCreateKey(&amp;hkRegistry,</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; (ACCESS_MASK) NULL,</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; &amp;ObjectAttributes,</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; 0,</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; NULL,</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; 0,</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; NULL);</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; </div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">if</span> (!NT_SUCCESS(Status))</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; {</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; hkRegistry = NULL;</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; </div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="comment">// Check to see if we need to loop again.</span></div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; </div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">if</span> (lpstrEndPath == NULL)</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; }</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; {</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; *lpstrEndPath = L<span class="charliteral">&#39;\\&#39;</span>;</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; lpstrDriverRegistryPath = lpstrEndPath;</div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; }</div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; </div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; </div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; } <span class="keywordflow">while</span>(1);</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; </div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">if</span> (!NT_SUCCESS(Status))</div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; {</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetHandleFromMap: failed to create key\n&quot;</span>));</div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; }</div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; }</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; {</div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; RtlAppendUnicodeToString(&amp;FullRegistryPath,</div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; lpstrDriverRegistryPath);</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; </div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; Status = ZwOpenKey(&amp;hkRegistry, KEY_READ, &amp;ObjectAttributes);</div>
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; </div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keywordflow">if</span> (!NT_SUCCESS(Status)) {</div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; </div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetHandleFromMap: failed to open key\n&quot;</span>));</div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; </div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="comment">// We set this special status so the looping code in the</span></div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="comment">// video port can handle unconfigured devices properly</span></div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="comment">// (in the case where the second video card entry may not</span></div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="comment">// be present).</span></div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; </div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; Status = STATUS_DEVICE_CONFIGURATION_ERROR;</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; }</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; }</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; </div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetHandleFromMap: reg-key path =\n\t%ws\n&quot;</span>,</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; fullRegistryPath));</div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; }</div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; </div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; </div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; ZwClose(handle);</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; }</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; </div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">if</span> (!NT_SUCCESS(Status)) {</div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; </div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetHandleFromMap: Error opening registry - status = %08lx\n&quot;</span>,</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; Status));</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; </div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; }</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; </div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">if</span> (pStatus) {</div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; *pStatus = Status;</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; }</div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; </div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: GetHandleFromMap: Exit\n\n&quot;</span>));</div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; </div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">return</span> hkRegistry;</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a00665_source.html#l00032">DispDriverRegHardwareProfile</a> , 以及 <a class="el" href="a00665_source.html#l00033">DispDriverRegHardwareProfileCreate</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l02945">InitLoadDriver()</a>, <a class="el" href="a00665_source.html#l01451">UserGetDeviceFromName()</a>, <a class="el" href="a00665_source.html#l00554">UserGetDisplayDriverNames()</a>, <a class="el" href="a00665_source.html#l00799">UserGetDisplayDriverParameters()</a> , 以及 <a class="el" href="a00665_source.html#l01239">UserSetDisplayDriverParameters()</a>.</p>
</div>
</div>
<a id="a64f37a06db6b3bcaf0b9bb15887675e6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a64f37a06db6b3bcaf0b9bb15887675e6">&#9670;&nbsp;</a></span>UserLoadDisplayDriver()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">HDEV UserLoadDisplayDriver </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00365.html#a705d19f394c3e5adfaf34b991bd255b2">PPHYSICAL_DEV_INFO</a>&#160;</td>
<td class="paramname"><em>physinfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PUNICODE_STRING&#160;</td>
<td class="paramname"><em>deviceName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PUNICODE_STRING&#160;</td>
<td class="paramname"><em>pstrDisplayDriver</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">LPDEVMODEW&#160;</td>
<td class="paramname"><em>lpdevmodeInformation</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">BOOL&#160;</td>
<td class="paramname"><em>bDefaultDisplay</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">BOOL&#160;</td>
<td class="paramname"><em>bMulti</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PDEVICE_LOCK *&#160;</td>
<td class="paramname"><em>pDevLock</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l01326">1326</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;{</div>
<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; </div>
<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; HDEV hdev = NULL;</div>
<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; LPWSTR lpstrDisplayDriverName;</div>
<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; LPWSTR lpstrOrg;</div>
<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; </div>
<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDisplayDriver: Enter\n&quot;</span>));</div>
<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; </div>
<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;<span class="comment"> * Try to get the display driver list.</span></div>
<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; </div>
<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; lpstrOrg = lpstrDisplayDriverName = <a class="code" href="a00665.html#a1178983eb56b481bd0bcb216f7d144cf">UserGetDisplayDriverNames</a>(deviceName);</div>
<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; </div>
<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; <span class="keywordflow">if</span> (lpstrDisplayDriverName != NULL) {</div>
<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; </div>
<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDisplayDriver: Display driver list was present.\n&quot;</span>));</div>
<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; </div>
<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; <span class="keywordflow">while</span> (*lpstrDisplayDriverName != UNICODE_NULL) {</div>
<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; </div>
<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;<span class="comment"> * Try to load the driver</span></div>
<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; </div>
<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDisplayDriver: Trying to load display driver %ws \n&quot;</span>, lpstrDisplayDriverName));</div>
<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; </div>
<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; hdev = GreCreateHDEV(lpstrDisplayDriverName,</div>
<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; lpdevmodeInformation,</div>
<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; physinfo-&gt;<a class="code" href="a02601.html#a671c14f1e07dff0246711968044db9c4">pDeviceHandle</a>,</div>
<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; bDefaultDisplay,</div>
<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; pDevLock);</div>
<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; </div>
<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;<span class="comment"> * If this is a multi-display driver, then we have to call down</span></div>
<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;<span class="comment"> * with an MDEV also to complete initialization.</span></div>
<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; </div>
<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; <span class="keywordflow">if</span> (hdev &amp;&amp; (bMulti == FALSE) &amp;&amp;</div>
<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; (physinfo-&gt;<a class="code" href="a02601.html#a65e861fd574d4b5dd70d500641b395e8">stateFlags</a> &amp; DISPLAY_DEVICE_MULTI_DRIVER)) {</div>
<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; </div>
<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; MDEV mdev;</div>
<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; </div>
<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; mdev.mdevID = <span class="stringliteral">&#39;MDEV&#39;</span>;</div>
<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; mdev.cmdev = 1;</div>
<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; mdev.mdevPos[0].hdev = hdev;</div>
<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; mdev.mdevPos[0].flags = 0;</div>
<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; mdev.mdevPos[0].rcPos.left = 0;</div>
<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; mdev.mdevPos[0].rcPos.top = 0;</div>
<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; mdev.mdevPos[0].rcPos.right = lpdevmodeInformation-&gt;dmPelsWidth;</div>
<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; mdev.mdevPos[0].rcPos.bottom = lpdevmodeInformation-&gt;dmPelsHeight;</div>
<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; </div>
<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; hdev = GreCreateHDEV(lpstrDisplayDriverName,</div>
<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; (LPDEVMODEW) &amp;mdev,</div>
<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; NULL,</div>
<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; bDefaultDisplay,</div>
<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; pDevLock);</div>
<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; }</div>
<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; </div>
<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; <span class="keywordflow">if</span> (hdev) {</div>
<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; </div>
<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; <span class="keywordflow">if</span> (pstrDisplayDriver) {</div>
<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; RtlCreateUnicodeString(pstrDisplayDriver, lpstrDisplayDriverName);</div>
<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; }</div>
<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; </div>
<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; <a class="code" href="a00371.html#a162a73e20dfabca084a3ebb4581631a8">UserAssert</a>(lpdevmodeInformation-&gt;dmSize == <span class="keyword">sizeof</span>(DEVMODEW));</div>
<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; </div>
<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; }</div>
<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; </div>
<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; </div>
<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit LoadDisplayDriver: DisplayDriverLoad failed\n&quot;</span>));</div>
<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; </div>
<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;<span class="comment"> * Go to the next name in the list of displays to try again.</span></div>
<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; <span class="keywordflow">while</span> (*lpstrDisplayDriverName != UNICODE_NULL) {</div>
<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; lpstrDisplayDriverName++;</div>
<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; }</div>
<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160; </div>
<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; lpstrDisplayDriverName++;</div>
<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; </div>
<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; }</div>
<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; </div>
<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; UserFreePool(lpstrOrg);</div>
<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; }</div>
<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; </div>
<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: LoadDisplayDriver: Exit\n\n&quot;</span>));</div>
<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; </div>
<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; <span class="keywordflow">return</span> hdev;</div>
<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; </div>
<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a00365_source.html#l01546">tagPHYSICAL_DEV_INFO::pDeviceHandle</a>, <a class="el" href="a00365_source.html#l01550">tagPHYSICAL_DEV_INFO::stateFlags</a>, <a class="el" href="a00950_source.html#l00117">UserAssert</a> , 以及 <a class="el" href="a00665_source.html#l00554">UserGetDisplayDriverNames()</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l02945">InitLoadDriver()</a>, <a class="el" href="a00665_source.html#l02654">UserCreateExclusiveDC()</a> , 以及 <a class="el" href="a00665_source.html#l02579">UserCreateHDEV()</a>.</p>
</div>
</div>
<a id="aa8b64103d379d1cc9e91a96db783aa63"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa8b64103d379d1cc9e91a96db783aa63">&#9670;&nbsp;</a></span>UserLogDisplayDriverEvent()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">VOID UserLogDisplayDriverEvent </td>
<td>(</td>
<td class="paramtype">DISP_DRIVER_LOG&#160;</td>
<td class="paramname"><em>MsgType</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l00643">643</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160;{</div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; HANDLE hkRegistry;</div>
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; OBJECT_ATTRIBUTES ObjectAttributes;</div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; UNICODE_STRING UnicodeString;</div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; </div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; NTSTATUS Status;</div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a> dwValue = 1;</div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; </div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; RtlInitUnicodeString(&amp;UnicodeString,</div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; L<span class="stringliteral">&quot;\\Registry\\Machine\\System\\CurrentControlSet\\&quot;</span></div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; L<span class="stringliteral">&quot;Control\\GraphicsDrivers\\InvalidDisplay&quot;</span>);</div>
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; </div>
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; InitializeObjectAttributes(&amp;ObjectAttributes,</div>
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; &amp;UnicodeString,</div>
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; OBJ_CASE_INSENSITIVE,</div>
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; NULL,</div>
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; NULL);</div>
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; </div>
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; Status = ZwCreateKey(&amp;hkRegistry,</div>
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; GENERIC_READ | GENERIC_WRITE,</div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; &amp;ObjectAttributes,</div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; 0L,</div>
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; NULL,</div>
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; REG_OPTION_VOLATILE,</div>
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; NULL);</div>
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; </div>
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keywordflow">if</span> (NT_SUCCESS(Status)) {</div>
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; </div>
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordflow">switch</span> (MsgType) {</div>
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; </div>
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordflow">case</span> MsgInvalidUsingDefaultMode:</div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; </div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; RtlInitUnicodeString(&amp;UnicodeString, L<span class="stringliteral">&quot;DefaultMode&quot;</span>);</div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; </div>
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordflow">case</span> MsgInvalidDisplayDriver:</div>
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; </div>
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; RtlInitUnicodeString(&amp;UnicodeString, L<span class="stringliteral">&quot;MissingDisplayDriver&quot;</span>);</div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; </div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">case</span> MsgInvalidOldDriver:</div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; </div>
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; RtlInitUnicodeString(&amp;UnicodeString, L<span class="stringliteral">&quot;OldDisplayDriver&quot;</span>);</div>
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; </div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="keywordflow">case</span> MsgInvalidDisplay16Colors:</div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; </div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; RtlInitUnicodeString(&amp;UnicodeString, L<span class="stringliteral">&quot;16ColorMode&quot;</span>);</div>
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; </div>
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keywordflow">case</span> MsgInvalidDisplayMode:</div>
<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; </div>
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; RtlInitUnicodeString(&amp;UnicodeString, L<span class="stringliteral">&quot;BadMode&quot;</span>);</div>
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; </div>
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">case</span> MsgInvalidConfiguration:</div>
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; </div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; RtlInitUnicodeString(&amp;UnicodeString, L<span class="stringliteral">&quot;InvalidConfiguration&quot;</span>);</div>
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; </div>
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; </div>
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#afa5f32de88404289ec03cd2c0e61e94f">RIP_ERROR</a>, <span class="stringliteral">&quot;UserLogDisplayDriverEvent: Invalid error message\n&quot;</span>);</div>
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; </div>
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; }</div>
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; </div>
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;<span class="comment"> * Write the optional data value under the key.</span></div>
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; </div>
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; (VOID) ZwSetValueKey(hkRegistry,</div>
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; &amp;UnicodeString,</div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; 0,</div>
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; REG_DWORD,</div>
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; &amp;dwValue,</div>
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keyword">sizeof</span>(<a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a>));</div>
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; </div>
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; (VOID)ZwClose(hkRegistry);</div>
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; }</div>
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a00563_source.html#l00175">DWORD</a>, <a class="el" href="a00371_source.html#l00028">RIP_ERROR</a> , 以及 <a class="el" href="a00371_source.html#l00131">RIPMSG0</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l02945">InitLoadDriver()</a>, <a class="el" href="a00665_source.html#l01758">UserBuildDevmodeList()</a> , 以及 <a class="el" href="a00665_source.html#l00799">UserGetDisplayDriverParameters()</a>.</p>
</div>
</div>
<a id="a8c6e355920ecb443e8d0f47bfbfff26d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8c6e355920ecb443e8d0f47bfbfff26d">&#9670;&nbsp;</a></span>UserReleaseDevmodeList()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">VOID UserReleaseDevmodeList </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00365.html#a705d19f394c3e5adfaf34b991bd255b2">PPHYSICAL_DEV_INFO</a>&#160;</td>
<td class="paramname"><em>physinfo</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l01942">1942</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160;{</div>
<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160;<span class="comment"> * Free up the resources - as long as it&#39;s not the VGA.</span></div>
<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160;<span class="comment"> * Assume the VGA is always first</span></div>
<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160; </div>
<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160; <span class="keywordflow">if</span> (physinfo != <a class="code" href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a>) {</div>
<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160; </div>
<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160; physinfo-&gt;<a class="code" href="a02601.html#a11272e040ff3989da159f50e88b7b8c6">cbdevmodeInfo</a> = 0;</div>
<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160; </div>
<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160; <span class="keywordflow">if</span> (physinfo-&gt;<a class="code" href="a02601.html#a1fe37d9234f46b11eab06dbfbafab7e9">devmodeInfo</a>) {</div>
<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160; UserFreePool(physinfo-&gt;<a class="code" href="a02601.html#a1fe37d9234f46b11eab06dbfbafab7e9">devmodeInfo</a>);</div>
<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160; physinfo-&gt;<a class="code" href="a02601.html#a1fe37d9234f46b11eab06dbfbafab7e9">devmodeInfo</a> = NULL;</div>
<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160; }</div>
<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160; }</div>
<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160; </div>
<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a00365_source.html#l01552">tagPHYSICAL_DEV_INFO::cbdevmodeInfo</a>, <a class="el" href="a00365_source.html#l01553">tagPHYSICAL_DEV_INFO::devmodeInfo</a> , 以及 <a class="el" href="a03257_source.html#l00095">gphysDevInfo</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l04187">NtUserEnumDisplaySettings()</a>.</p>
</div>
</div>
<a id="a744babe1f701ee80c5d81250e69c4db5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a744babe1f701ee80c5d81250e69c4db5">&#9670;&nbsp;</a></span>UserSaveCurrentMode()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">VOID UserSaveCurrentMode </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00365.html#a07e239ec4a8e696c787df685bce70b61">PDESKTOP</a>&#160;</td>
<td class="paramname"><em>pDesktop</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00365.html#a705d19f394c3e5adfaf34b991bd255b2">PPHYSICAL_DEV_INFO</a>&#160;</td>
<td class="paramname"><em>physinfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">LPDEVMODEW&#160;</td>
<td class="paramname"><em>lpdevmodeInformation</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l00173">173</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;{</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a> newSize = lpdevmodeInformation-&gt;dmSize +</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; lpdevmodeInformation-&gt;dmDriverExtra;</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; PDEVMODEW pDevmode;</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; </div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">if</span> (pDesktop) {</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; </div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; pDevmode = UserAllocPool(newSize, TAG_DEVMODE);</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; </div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">if</span> (pDevmode) {</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; </div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; RtlCopyMemory(pDevmode,</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; lpdevmodeInformation,</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; newSize);</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; </div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span> (pDesktop-&gt;<a class="code" href="a02801.html#a7670d05ec8727e45af6446b08a8e078c">pDesktopDevmode</a>) {</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; UserFreePool(pDesktop-&gt;<a class="code" href="a02801.html#a7670d05ec8727e45af6446b08a8e078c">pDesktopDevmode</a>);</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#afa5f32de88404289ec03cd2c0e61e94f">RIP_ERROR</a>, <span class="stringliteral">&quot;UserSaveCurrentMode - previous DEVMODE missing !\n&quot;</span>);</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; </div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; pDesktop-&gt;<a class="code" href="a02801.html#a7670d05ec8727e45af6446b08a8e078c">pDesktopDevmode</a> = pDevmode;</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; </div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; }</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; </div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">if</span> (physinfo) {</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; </div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; pDevmode = UserAllocPool(newSize, TAG_DEVMODE);</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; </div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">if</span> (pDevmode) {</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; </div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; RtlCopyMemory(pDevmode,</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; lpdevmodeInformation,</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; newSize);</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; </div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">if</span> (physinfo-&gt;<a class="code" href="a02601.html#a19bee6963f84c40169f417b39bc46059">pCurrentDevmode</a>) {</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; UserFreePool(physinfo-&gt;<a class="code" href="a02601.html#a19bee6963f84c40169f417b39bc46059">pCurrentDevmode</a>);</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; </div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; physinfo-&gt;<a class="code" href="a02601.html#a19bee6963f84c40169f417b39bc46059">pCurrentDevmode</a> = pDevmode;</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; }</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; }</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; </div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a00563_source.html#l00175">DWORD</a>, <a class="el" href="a00365_source.html#l01551">tagPHYSICAL_DEV_INFO::pCurrentDevmode</a>, <a class="el" href="a00899_source.html#l01705">tagDESKTOP::pDesktopDevmode</a>, <a class="el" href="a00371_source.html#l00028">RIP_ERROR</a> , 以及 <a class="el" href="a00371_source.html#l00131">RIPMSG0</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l02945">InitLoadDriver()</a> , 以及 <a class="el" href="a00689_source.html#l01097">UserChangeDisplaySettings()</a>.</p>
</div>
</div>
<a id="a74dce85d73485fdf46d61ce465e18061"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a74dce85d73485fdf46d61ce465e18061">&#9670;&nbsp;</a></span>UserSetDisplayDriverParameters()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">NTSTATUS UserSetDisplayDriverParameters </td>
<td>(</td>
<td class="paramtype">PUNICODE_STRING&#160;</td>
<td class="paramname"><em>deviceName</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00899.html#a66d45395271597521ff27e0a72253d9f">DISP_DRIVER_PARAM_TYPE</a>&#160;</td>
<td class="paramname"><em>ParamType</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PDEVMODEW&#160;</td>
<td class="paramname"><em>pdevmode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PRECT&#160;</td>
<td class="paramname"><em>pRect</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l01239">1239</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;{</div>
<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; </div>
<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; NTSTATUS retStatus = STATUS_UNSUCCESSFUL;</div>
<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; HANDLE hkRegistry;</div>
<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; <a class="code" href="a00665.html#a01e58bda8aaf9059fe3ffa0ddd55567b">DISP_DRIVER_REGISTRY_TYPE</a> registryParam = <a class="code" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa01ae391162e54069de625bdc7049e934">DispDriverRegHardwareProfileCreate</a>;</div>
<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; </div>
<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: SetParms\n&quot;</span>));</div>
<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; </div>
<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <span class="keywordflow">switch</span> (ParamType) {</div>
<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; </div>
<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; <span class="keywordflow">case</span> <a class="code" href="a00899.html#afc13cb8b9a1ddb236b66ee390aa8efdda6760d6d8884c7ede93accae00a0e84b1">DispDriverParamDefault</a>:</div>
<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; </div>
<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: SetParms: Default Settings\n&quot;</span>));</div>
<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; </div>
<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; <span class="comment">// try the hardware profile first and see if we can get parameters</span></div>
<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; <span class="comment">// from that. If that fails, fall back to getting the system</span></div>
<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <span class="comment">// parameters.</span></div>
<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; </div>
<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; <span class="keywordflow">while</span> (1) {</div>
<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; </div>
<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; hkRegistry = <a class="code" href="a00665.html#ae157271d2738ad5440f4428d44232e65">UserGetRegistryHandleFromDeviceMap</a>(deviceName,</div>
<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; registryParam,</div>
<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; FALSE,</div>
<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; NULL);</div>
<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; </div>
<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <span class="keywordflow">if</span> (hkRegistry) {</div>
<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; </div>
<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; retStatus = <a class="code" href="a00665.html#a99ff717624d5af5628c02ebf95a506ce">UserWriteDisplayDriverParameters</a>(RTL_REGISTRY_HANDLE,</div>
<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; (LPWSTR) hkRegistry,</div>
<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; pdevmode,</div>
<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; pRect);</div>
<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; ZwClose(hkRegistry);</div>
<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; }</div>
<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; </div>
<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; <span class="keywordflow">if</span> ( (NT_SUCCESS(retStatus)) ||</div>
<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; (registryParam != <a class="code" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa01ae391162e54069de625bdc7049e934">DispDriverRegHardwareProfileCreate</a>) ) {</div>
<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; }</div>
<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; </div>
<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; registryParam = <a class="code" href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa58218890fafaa0643a59e9294a9843d0">DispDriverRegGlobal</a>;</div>
<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; }</div>
<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; </div>
<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; </div>
<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; <span class="keywordflow">case</span> <a class="code" href="a00899.html#afc13cb8b9a1ddb236b66ee390aa8efddaff58d8407e3f19ebdcedc76990bfb988">DispDriverParamUser</a>:</div>
<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; </div>
<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: SetParms: USER Settings\n&quot;</span>));</div>
<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; </div>
<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; retStatus = <a class="code" href="a00665.html#a99ff717624d5af5628c02ebf95a506ce">UserWriteDisplayDriverParameters</a>(RTL_REGISTRY_USER,</div>
<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; L<span class="stringliteral">&quot;BUGBUG&quot;</span>,</div>
<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; pdevmode,</div>
<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; pRect);</div>
<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; </div>
<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; </div>
<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; </div>
<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <a class="code" href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a>(<a class="code" href="a00371.html#afa5f32de88404289ec03cd2c0e61e94f">RIP_ERROR</a>,</div>
<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <span class="stringliteral">&quot;UserSetDisplayDriverParameters - invalid type\n&quot;</span>);</div>
<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; </div>
<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; retStatus = STATUS_INVALID_PARAMETER;</div>
<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; </div>
<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; }</div>
<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; </div>
<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; </div>
<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; TRACE_INIT((<span class="stringliteral">&quot;UserInit: SetParms: Exit\n\n&quot;</span>));</div>
<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; </div>
<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; <span class="keywordflow">return</span> (retStatus);</div>
<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a00899_source.html#l03345">DispDriverParamDefault</a>, <a class="el" href="a00899_source.html#l03346">DispDriverParamUser</a>, <a class="el" href="a00665_source.html#l00031">DispDriverRegGlobal</a>, <a class="el" href="a00665_source.html#l00033">DispDriverRegHardwareProfileCreate</a>, <a class="el" href="a00371_source.html#l00028">RIP_ERROR</a>, <a class="el" href="a00371_source.html#l00131">RIPMSG0</a>, <a class="el" href="a00665_source.html#l00249">UserGetRegistryHandleFromDeviceMap()</a> , 以及 <a class="el" href="a00665_source.html#l01146">UserWriteDisplayDriverParameters()</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00689_source.html#l01097">UserChangeDisplaySettings()</a>.</p>
</div>
</div>
<a id="a99ff717624d5af5628c02ebf95a506ce"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a99ff717624d5af5628c02ebf95a506ce">&#9670;&nbsp;</a></span>UserWriteDisplayDriverParameters()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">NTSTATUS UserWriteDisplayDriverParameters </td>
<td>(</td>
<td class="paramtype">ULONG&#160;</td>
<td class="paramname"><em>RelativeTo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PWSTR&#160;</td>
<td class="paramname"><em>Path</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PDEVMODEW&#160;</td>
<td class="paramname"><em>pdevmode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">PRECT&#160;</td>
<td class="paramname"><em>pRect</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l01146">1146</a> 行定义.</p>
<div class="fragment"><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;{</div>
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; ULONG i;</div>
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; NTSTATUS retStatus ;</div>
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a> data[7];</div>
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; </div>
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; data[0] = pdevmode-&gt;dmBitsPerPel;</div>
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; data[1] = pdevmode-&gt;dmPelsWidth;</div>
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; data[2] = pdevmode-&gt;dmPelsHeight;</div>
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; data[3] = pdevmode-&gt;dmDisplayFrequency;</div>
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; data[4] = pdevmode-&gt;dmDisplayFlags;</div>
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; data[5] = pdevmode-&gt;dmPanningWidth;</div>
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; data[6] = pdevmode-&gt;dmPanningHeight;</div>
<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; </div>
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; <span class="keywordflow">for</span> (i=0; i &lt; 7; i++) {</div>
<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; </div>
<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; retStatus = RtlWriteRegistryValue(RelativeTo,</div>
<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; Path,</div>
<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; <a class="code" href="a00665.html#a2629889fd8bf33088b544b6c3128707a">DefaultSettings</a>[i],</div>
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; REG_DWORD,</div>
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; &amp;data[i],</div>
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; <span class="keyword">sizeof</span>(<a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a>));</div>
<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <span class="keywordflow">if</span> (!NT_SUCCESS(retStatus)) {</div>
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; </div>
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <span class="comment">// If something failed, stop</span></div>
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; </div>
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="keywordflow">return</span> retStatus;</div>
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; }</div>
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; }</div>
<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; </div>
<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="keywordflow">if</span> (pdevmode-&gt;dmDriverExtra) {</div>
<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; </div>
<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; retStatus = RtlWriteRegistryValue(RelativeTo,</div>
<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; Path,</div>
<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; <a class="code" href="a00665.html#a2629889fd8bf33088b544b6c3128707a">DefaultSettings</a>[7],</div>
<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; REG_BINARY,</div>
<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; ((PUCHAR)pdevmode) + pdevmode-&gt;dmSize,</div>
<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; pdevmode-&gt;dmDriverExtra);</div>
<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; }</div>
<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; </div>
<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <span class="keywordflow">if</span> (NT_SUCCESS(retStatus) &amp;&amp; pRect) {</div>
<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; </div>
<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; ULONG attach = 1;</div>
<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; </div>
<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; <span class="keywordflow">if</span> (pRect == (PRECT)-1) {</div>
<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; attach = 0;</div>
<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; }</div>
<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; </div>
<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; data[1] = attach;</div>
<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; data[2] = attach ? (pRect-&gt;left + pRect-&gt;right) / 2 : 0;</div>
<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; data[3] = attach ? (pRect-&gt;top + pRect-&gt;bottom) / 2 : 0;</div>
<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; </div>
<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; <span class="keywordflow">for</span> (i=1; i &lt; 4; i++) {</div>
<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; </div>
<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; retStatus = RtlWriteRegistryValue(RelativeTo,</div>
<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; Path,</div>
<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; <a class="code" href="a00665.html#a998b6ce5633527f762d09b0f887e633f">AttachedSettings</a>[i],</div>
<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; REG_DWORD,</div>
<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; &amp;data[i],</div>
<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <span class="keyword">sizeof</span>(<a class="code" href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a>));</div>
<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <span class="keywordflow">if</span> (!NT_SUCCESS(retStatus)) {</div>
<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; </div>
<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <span class="comment">// If something failed, stop</span></div>
<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; </div>
<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; }</div>
<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; }</div>
<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; }</div>
<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; </div>
<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; <span class="keywordflow">return</span> retStatus;</div>
<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">引用了 <a class="el" href="a00665_source.html#l00742">AttachedSettings</a>, <a class="el" href="a00665_source.html#l00730">DefaultSettings</a> , 以及 <a class="el" href="a00563_source.html#l00175">DWORD</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l01239">UserSetDisplayDriverParameters()</a>.</p>
</div>
</div>
<h2 class="groupheader">变量说明</h2>
<a id="a998b6ce5633527f762d09b0f887e633f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a998b6ce5633527f762d09b0f887e633f">&#9670;&nbsp;</a></span>AttachedSettings</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">LPWSTR AttachedSettings[]</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<b>初始值:</b><div class="fragment"><div class="line">= {</div>
<div class="line"> L<span class="stringliteral">&quot;Attach.PrimaryDevice&quot;</span>,</div>
<div class="line"> L<span class="stringliteral">&quot;Attach.ToDesktop&quot;</span>,</div>
<div class="line"> L<span class="stringliteral">&quot;Attach.RelativeX&quot;</span>,</div>
<div class="line"> L<span class="stringliteral">&quot;Attach.RelativeY&quot;</span>,</div>
<div class="line">}</div>
</div><!-- fragment -->
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l00742">742</a> 行定义.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l02945">InitLoadDriver()</a> , 以及 <a class="el" href="a00665_source.html#l01146">UserWriteDisplayDriverParameters()</a>.</p>
</div>
</div>
<a id="a762f2fbf9a0ad4d9a63f7c92adce1297"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a762f2fbf9a0ad4d9a63f7c92adce1297">&#9670;&nbsp;</a></span>bMultipleDisplaySystem</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">BOOL bMultipleDisplaySystem = FALSE</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l00046">46</a> 行定义.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l02945">InitLoadDriver()</a> , 以及 <a class="el" href="a00689_source.html#l01097">UserChangeDisplaySettings()</a>.</p>
</div>
</div>
<a id="a2629889fd8bf33088b544b6c3128707a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2629889fd8bf33088b544b6c3128707a">&#9670;&nbsp;</a></span>DefaultSettings</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">LPWSTR DefaultSettings[8]</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<b>初始值:</b><div class="fragment"><div class="line">= {</div>
<div class="line"> L<span class="stringliteral">&quot;DefaultSettings.BitsPerPel&quot;</span>,</div>
<div class="line"> L<span class="stringliteral">&quot;DefaultSettings.XResolution&quot;</span>,</div>
<div class="line"> L<span class="stringliteral">&quot;DefaultSettings.YResolution&quot;</span>,</div>
<div class="line"> L<span class="stringliteral">&quot;DefaultSettings.VRefresh&quot;</span>,</div>
<div class="line"> L<span class="stringliteral">&quot;DefaultSettings.Flags&quot;</span>,</div>
<div class="line"> L<span class="stringliteral">&quot;DefaultSettings.XPanning&quot;</span>,</div>
<div class="line"> L<span class="stringliteral">&quot;DefaultSettings.YPanning&quot;</span>,</div>
<div class="line"> L<span class="stringliteral">&quot;DefaultSettings.DriverExtra&quot;</span>,</div>
<div class="line">}</div>
</div><!-- fragment -->
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l00730">730</a> 行定义.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l00799">UserGetDisplayDriverParameters()</a> , 以及 <a class="el" href="a00665_source.html#l01146">UserWriteDisplayDriverParameters()</a>.</p>
</div>
</div>
<a id="a4f95d12ae9db57753d1ce7447479f0ee"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4f95d12ae9db57753d1ce7447479f0ee">&#9670;&nbsp;</a></span>gbBaseVideo</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">BOOL gbBaseVideo = FALSE</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l00045">45</a> 行定义.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l02945">InitLoadDriver()</a>, <a class="el" href="a00665_source.html#l01977">ProbeAndCaptureDevmode()</a> , 以及 <a class="el" href="a00665_source.html#l00799">UserGetDisplayDriverParameters()</a>.</p>
</div>
</div>
<a id="a5de8fc19f0066ed30a41b9c0ef4d4deb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5de8fc19f0066ed30a41b9c0ef4d4deb">&#9670;&nbsp;</a></span>SoftwareSettings</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">LPWSTR SoftwareSettings[]</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<b>初始值:</b><div class="fragment"><div class="line">= {</div>
<div class="line"> L<span class="stringliteral">&quot;MultiDisplayDriver&quot;</span>,</div>
<div class="line"> L<span class="stringliteral">&quot;MirroringDriver&quot;</span>,</div>
<div class="line"> L<span class="stringliteral">&quot;VgaCompatible&quot;</span>,</div>
<div class="line">}</div>
</div><!-- fragment -->
<p class="definition">在文件 <a class="el" href="a00665_source.html">drvsup.c</a> 第 <a class="el" href="a00665_source.html#l00750">750</a> 行定义.</p>
<p class="reference">被这些函数引用 <a class="el" href="a00665_source.html#l01451">UserGetDeviceFromName()</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div class="ttc" id="aa00665_html_a762f2fbf9a0ad4d9a63f7c92adce1297"><div class="ttname"><a href="a00665.html#a762f2fbf9a0ad4d9a63f7c92adce1297">bMultipleDisplaySystem</a></div><div class="ttdeci">BOOL bMultipleDisplaySystem</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00046">drvsup.c:46</a></div></div>
<div class="ttc" id="aa00371_html_a01c4659626880ba56745765a3580a36b"><div class="ttname"><a href="a00371.html#a01c4659626880ba56745765a3580a36b">RIPMSG0</a></div><div class="ttdeci">#define RIPMSG0(flags, szFmt)</div><div class="ttdef"><b>Definition:</b> <a href="a00371_source.html#l00131">winerrp.h:131</a></div></div>
<div class="ttc" id="aa02605_html_a0a83e72210bd4213414535c6d7351d6f"><div class="ttname"><a href="a02605.html#a0a83e72210bd4213414535c6d7351d6f">tagDISPLAYINFO::cBitsPixel</a></div><div class="ttdeci">UINT cBitsPixel</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01583">user.h:1583</a></div></div>
<div class="ttc" id="aa00719_html_a333336c1f5ede3d334818ee0b68bddca"><div class="ttname"><a href="a00719.html#a333336c1f5ede3d334818ee0b68bddca">xxxLW_DCInit</a></div><div class="ttdeci">VOID xxxLW_DCInit(VOID)</div><div class="ttdef"><b>Definition:</b> <a href="a00719_source.html#l00705">init.c:705</a></div></div>
<div class="ttc" id="aa02605_html_a7ae1e4da76ad52e90f87fe39f43b2c4f"><div class="ttname"><a href="a02605.html#a7ae1e4da76ad52e90f87fe39f43b2c4f">tagDISPLAYINFO::rcPrimaryScreen</a></div><div class="ttdeci">RECT rcPrimaryScreen</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01571">user.h:1571</a></div></div>
<div class="ttc" id="aa00665_html_a80592f8b0ad68fc0311741b0cbf6e01aa01ae391162e54069de625bdc7049e934"><div class="ttname"><a href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa01ae391162e54069de625bdc7049e934">DispDriverRegHardwareProfileCreate</a></div><div class="ttdeci">@ DispDriverRegHardwareProfileCreate</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00033">drvsup.c:33</a></div></div>
<div class="ttc" id="aa00821_html_af5e5b32f8171b8bb0dc4c27012b77918"><div class="ttname"><a href="a00821.html#af5e5b32f8171b8bb0dc4c27012b77918">FastGetProfileIntFromID</a></div><div class="ttdeci">int FastGetProfileIntFromID(UINT idSection, UINT idKey, int def)</div><div class="ttdef"><b>Definition:</b> <a href="a00821_source.html#l00631">profile.c:631</a></div></div>
<div class="ttc" id="aa00665_html_ae157271d2738ad5440f4428d44232e65"><div class="ttname"><a href="a00665.html#ae157271d2738ad5440f4428d44232e65">UserGetRegistryHandleFromDeviceMap</a></div><div class="ttdeci">HANDLE UserGetRegistryHandleFromDeviceMap(PUNICODE_STRING deviceName, DISP_DRIVER_REGISTRY_TYPE ParamType, BOOL bMatchBaseVideo, PNTSTATUS pStatus)</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00249">drvsup.c:249</a></div></div>
<div class="ttc" id="aa00899_html_ae451a2dc8791c420d7c956a63adc33ba"><div class="ttname"><a href="a00899.html#ae451a2dc8791c420d7c956a63adc33ba">EnterCrit</a></div><div class="ttdeci">VOID EnterCrit(VOID)</div></div>
<div class="ttc" id="aa02801_html"><div class="ttname"><a href="a02801.html">tagDESKTOP</a></div><div class="ttdef"><b>Definition:</b> <a href="a00899_source.html#l01703">userk.h:1703</a></div></div>
<div class="ttc" id="aa02601_html"><div class="ttname"><a href="a02601.html">tagPHYSICAL_DEV_INFO</a></div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01543">user.h:1543</a></div></div>
<div class="ttc" id="aa00371_html_ad6b24a3d61abdc148c8751b5c5add686"><div class="ttname"><a href="a00371.html#ad6b24a3d61abdc148c8751b5c5add686">RIP_VERBOSE</a></div><div class="ttdeci">#define RIP_VERBOSE</div><div class="ttdef"><b>Definition:</b> <a href="a00371_source.html#l00030">winerrp.h:30</a></div></div>
<div class="ttc" id="aa00935_html_a479bbe69c871894f6ca23dfa237481ad"><div class="ttname"><a href="a00935.html#a479bbe69c871894f6ca23dfa237481ad">SetRect</a></div><div class="ttdeci">BOOL APIENTRY SetRect(LPRECT prc, int left, int top, int right, int bottom)</div><div class="ttdef"><b>Definition:</b> <a href="a00935_source.html#l00021">rect.c:21</a></div></div>
<div class="ttc" id="aa02605_html_af0da313e582dc95c2853349086631cd8"><div class="ttname"><a href="a02605.html#af0da313e582dc95c2853349086631cd8">tagDISPLAYINFO::hdcScreen</a></div><div class="ttdeci">HDC hdcScreen</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01566">user.h:1566</a></div></div>
<div class="ttc" id="aa03257_html_aea20d6528ad57e108c962a4fcb2e91d9"><div class="ttname"><a href="a03257.html#aea20d6528ad57e108c962a4fcb2e91d9">gphysDevInfo</a></div><div class="ttdeci">PHYSICAL_DEV_INFO gphysDevInfo[]</div><div class="ttdef"><b>Definition:</b> <a href="a03257_source.html#l00095">kernel/globals.c:95</a></div></div>
<div class="ttc" id="aa02601_html_ad199e09483960703c70d31130d1a6cf9"><div class="ttname"><a href="a02601.html#ad199e09483960703c70d31130d1a6cf9">tagPHYSICAL_DEV_INFO::pFileObject</a></div><div class="ttdeci">PVOID pFileObject</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01547">user.h:1547</a></div></div>
<div class="ttc" id="aa00665_html_a80592f8b0ad68fc0311741b0cbf6e01aa5ce32297dc3f6df4e82c6e0790d30063"><div class="ttname"><a href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa5ce32297dc3f6df4e82c6e0790d30063">DispDriverRegHardwareProfile</a></div><div class="ttdeci">@ DispDriverRegHardwareProfile</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00032">drvsup.c:32</a></div></div>
<div class="ttc" id="aa00665_html_ad1a9b877f3705368d000061536e1b1fb"><div class="ttname"><a href="a00665.html#ad1a9b877f3705368d000061536e1b1fb">ProbeAndCaptureDeviceName</a></div><div class="ttdeci">BOOL ProbeAndCaptureDeviceName(PUNICODE_STRING Destination, PUNICODE_STRING Source)</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00073">drvsup.c:73</a></div></div>
<div class="ttc" id="aa00665_html_af58d084fab4188005b01c976f76bbefa"><div class="ttname"><a href="a00665.html#af58d084fab4188005b01c976f76bbefa">UserBuildDevmodeList</a></div><div class="ttdeci">VOID UserBuildDevmodeList(PPHYSICAL_DEV_INFO physinfo)</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l01758">drvsup.c:1758</a></div></div>
<div class="ttc" id="aa00665_html_a4f95d12ae9db57753d1ce7447479f0ee"><div class="ttname"><a href="a00665.html#a4f95d12ae9db57753d1ce7447479f0ee">gbBaseVideo</a></div><div class="ttdeci">BOOL gbBaseVideo</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00045">drvsup.c:45</a></div></div>
<div class="ttc" id="aa00371_html_a162a73e20dfabca084a3ebb4581631a8"><div class="ttname"><a href="a00371.html#a162a73e20dfabca084a3ebb4581631a8">UserAssert</a></div><div class="ttdeci">#define UserAssert(exp)</div><div class="ttdef"><b>Definition:</b> <a href="a00950_source.html#l00117">usersrv.h:117</a></div></div>
<div class="ttc" id="aa00371_html_afa5f32de88404289ec03cd2c0e61e94f"><div class="ttname"><a href="a00371.html#afa5f32de88404289ec03cd2c0e61e94f">RIP_ERROR</a></div><div class="ttdeci">#define RIP_ERROR</div><div class="ttdef"><b>Definition:</b> <a href="a00371_source.html#l00028">winerrp.h:28</a></div></div>
<div class="ttc" id="aa00020_html_a263f5b35c44d9f9ae5c74acae8037644"><div class="ttname"><a href="a00020.html#a263f5b35c44d9f9ae5c74acae8037644">rcScreen</a></div><div class="ttdeci">RECT rcScreen</div><div class="ttdef"><b>Definition:</b> <a href="a00020_source.html#l00059">clglobal.c:59</a></div></div>
<div class="ttc" id="aa03257_html_a5f96c779e6c723388217ee64122dbec5"><div class="ttname"><a href="a03257.html#a5f96c779e6c723388217ee64122dbec5">cphysDevInfo</a></div><div class="ttdeci">DWORD cphysDevInfo</div><div class="ttdef"><b>Definition:</b> <a href="a03257_source.html#l00105">kernel/globals.c:105</a></div></div>
<div class="ttc" id="aa00371_html_a31aafffb49dfe98bdc749c9b35c90162"><div class="ttname"><a href="a00371.html#a31aafffb49dfe98bdc749c9b35c90162">RIPMSG1</a></div><div class="ttdeci">#define RIPMSG1(flags, szFmt, p1)</div><div class="ttdef"><b>Definition:</b> <a href="a00371_source.html#l00132">winerrp.h:132</a></div></div>
<div class="ttc" id="aa02601_html_a2a9b923a44a5a1384ba6b845933e516c"><div class="ttname"><a href="a02601.html#a2a9b923a44a5a1384ba6b845933e516c">tagPHYSICAL_DEV_INFO::DevOwned</a></div><div class="ttdeci">UCHAR DevOwned</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01548">user.h:1548</a></div></div>
<div class="ttc" id="aa00257_html_a8315d2c807ba18ba9e528c40614b6173"><div class="ttname"><a href="a00257.html#a8315d2c807ba18ba9e528c40614b6173">PtiCurrent</a></div><div class="ttdeci">PTHREADINFO PtiCurrent(VOID)</div><div class="ttdef"><b>Definition:</b> <a href="a00263_source.html#l00526">winmgrc.c:526</a></div></div>
<div class="ttc" id="aa00665_html_aa8b64103d379d1cc9e91a96db783aa63"><div class="ttname"><a href="a00665.html#aa8b64103d379d1cc9e91a96db783aa63">UserLogDisplayDriverEvent</a></div><div class="ttdeci">VOID UserLogDisplayDriverEvent(DISP_DRIVER_LOG MsgType)</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00643">drvsup.c:643</a></div></div>
<div class="ttc" id="aa00665_html_a01e58bda8aaf9059fe3ffa0ddd55567b"><div class="ttname"><a href="a00665.html#a01e58bda8aaf9059fe3ffa0ddd55567b">DISP_DRIVER_REGISTRY_TYPE</a></div><div class="ttdeci">enum _DISP_DRIVER_REGISTRY_TYPE DISP_DRIVER_REGISTRY_TYPE</div></div>
<div class="ttc" id="aa00665_html_ad5ab78c8fa70d3c1a63e786bc439ee73"><div class="ttname"><a href="a00665.html#ad5ab78c8fa70d3c1a63e786bc439ee73">InitUserScreen</a></div><div class="ttdeci">VOID InitUserScreen(VOID)</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l02855">drvsup.c:2855</a></div></div>
<div class="ttc" id="aa02605_html_a76af5d5bf5f5037a7ddcd8bb543fd388"><div class="ttname"><a href="a02605.html#a76af5d5bf5f5037a7ddcd8bb543fd388">tagDISPLAYINFO::pDevInfo</a></div><div class="ttdeci">PPHYSICAL_DEV_INFO pDevInfo</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01578">user.h:1578</a></div></div>
<div class="ttc" id="aa02601_html_a65e861fd574d4b5dd70d500641b395e8"><div class="ttname"><a href="a02601.html#a65e861fd574d4b5dd70d500641b395e8">tagPHYSICAL_DEV_INFO::stateFlags</a></div><div class="ttdeci">DWORD stateFlags</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01550">user.h:1550</a></div></div>
<div class="ttc" id="aa00665_html_a5de8fc19f0066ed30a41b9c0ef4d4deb"><div class="ttname"><a href="a00665.html#a5de8fc19f0066ed30a41b9c0ef4d4deb">SoftwareSettings</a></div><div class="ttdeci">static LPWSTR SoftwareSettings[]</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00750">drvsup.c:750</a></div></div>
<div class="ttc" id="aa00665_html_a7f72492be72deb72088a46321f3703e9"><div class="ttname"><a href="a00665.html#a7f72492be72deb72088a46321f3703e9">ProbeAndCaptureDevmode</a></div><div class="ttdeci">NTSTATUS ProbeAndCaptureDevmode(PUNICODE_STRING pstrDeviceName, PDEVMODEW *DestinationDevmode, PDEVMODEW SourceDevmode, BOOL bKernelMode)</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l01977">drvsup.c:1977</a></div></div>
<div class="ttc" id="aa00899_html_afc13cb8b9a1ddb236b66ee390aa8efddaff58d8407e3f19ebdcedc76990bfb988"><div class="ttname"><a href="a00899.html#afc13cb8b9a1ddb236b66ee390aa8efddaff58d8407e3f19ebdcedc76990bfb988">DispDriverParamUser</a></div><div class="ttdeci">@ DispDriverParamUser</div><div class="ttdef"><b>Definition:</b> <a href="a00899_source.html#l03346">userk.h:3346</a></div></div>
<div class="ttc" id="aa00371_html_ae61d954062a9ece52e350e54cad9a23d"><div class="ttname"><a href="a00371.html#ae61d954062a9ece52e350e54cad9a23d">RIPERR0</a></div><div class="ttdeci">#define RIPERR0(idErr, flags, szFmt)</div><div class="ttdef"><b>Definition:</b> <a href="a00371_source.html#l00119">winerrp.h:119</a></div></div>
<div class="ttc" id="aa00665_html_a99ff717624d5af5628c02ebf95a506ce"><div class="ttname"><a href="a00665.html#a99ff717624d5af5628c02ebf95a506ce">UserWriteDisplayDriverParameters</a></div><div class="ttdeci">NTSTATUS UserWriteDisplayDriverParameters(ULONG RelativeTo, PWSTR Path, PDEVMODEW pdevmode, PRECT pRect)</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l01146">drvsup.c:1146</a></div></div>
<div class="ttc" id="aa00665_html_a1178983eb56b481bd0bcb216f7d144cf"><div class="ttname"><a href="a00665.html#a1178983eb56b481bd0bcb216f7d144cf">UserGetDisplayDriverNames</a></div><div class="ttdeci">LPWSTR UserGetDisplayDriverNames(PUNICODE_STRING deviceName)</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00554">drvsup.c:554</a></div></div>
<div class="ttc" id="aa03257_html_a1a36496b13c02b06ee64e9c01c029477"><div class="ttname"><a href="a03257.html#a1a36496b13c02b06ee64e9c01c029477">ghdcMem</a></div><div class="ttdeci">HDC ghdcMem</div><div class="ttdef"><b>Definition:</b> <a href="a03257_source.html#l00399">kernel/globals.c:399</a></div></div>
<div class="ttc" id="aa00665_html_a2ccdbdde9498b06c48c5eca065b9a1fd"><div class="ttname"><a href="a00665.html#a2ccdbdde9498b06c48c5eca065b9a1fd">DISPLAY_DEVICE_VGA_COMPATIBLE</a></div><div class="ttdeci">#define DISPLAY_DEVICE_VGA_COMPATIBLE</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00059">drvsup.c:59</a></div></div>
<div class="ttc" id="aa02609_html"><div class="ttname"><a href="a02609.html">tagDESKTOPINFO</a></div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01599">user.h:1599</a></div></div>
<div class="ttc" id="aa00665_html_a291aca25f546e197608f39e4887001a9"><div class="ttname"><a href="a00665.html#a291aca25f546e197608f39e4887001a9">UserGetDeviceFromName</a></div><div class="ttdeci">PPHYSICAL_DEV_INFO UserGetDeviceFromName(PUNICODE_STRING pstrDeviceName, ULONG bShareState)</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l01451">drvsup.c:1451</a></div></div>
<div class="ttc" id="aa03257_html_ab597263bdbb3441715804712fcf29e6d"><div class="ttname"><a href="a03257.html#ab597263bdbb3441715804712fcf29e6d">gpDispInfo</a></div><div class="ttdeci">PDISPLAYINFO gpDispInfo</div><div class="ttdef"><b>Definition:</b> <a href="a03257_source.html#l00125">kernel/globals.c:125</a></div></div>
<div class="ttc" id="aa00821_html_a71ab7da1e1b58e117d8fe2bcca8fcdb0"><div class="ttname"><a href="a00821.html#a71ab7da1e1b58e117d8fe2bcca8fcdb0">FastOpenProfileUserMapping</a></div><div class="ttdeci">BOOL FastOpenProfileUserMapping(VOID)</div><div class="ttdef"><b>Definition:</b> <a href="a00821_source.html#l00160">profile.c:160</a></div></div>
<div class="ttc" id="aa02605_html_a81f6c7e5df9c00e3f33e6e1a94ac75fc"><div class="ttname"><a href="a02605.html#a81f6c7e5df9c00e3f33e6e1a94ac75fc">tagDISPLAYINFO::hDev</a></div><div class="ttdeci">HANDLE hDev</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01576">user.h:1576</a></div></div>
<div class="ttc" id="aa00821_html_aa99363e718e5d1c8d2d5232e51fe2716"><div class="ttname"><a href="a00821.html#aa99363e718e5d1c8d2d5232e51fe2716">FastCloseProfileUserMapping</a></div><div class="ttdeci">BOOL FastCloseProfileUserMapping(VOID)</div><div class="ttdef"><b>Definition:</b> <a href="a00821_source.html#l00224">profile.c:224</a></div></div>
<div class="ttc" id="aa00680_html_a3d55823092d5efdce994868cd5efa7d8"><div class="ttname"><a href="a00680.html#a3d55823092d5efdce994868cd5efa7d8">SharedAlloc</a></div><div class="ttdeci">PVOID SharedAlloc(UINT cbAlloc)</div><div class="ttdef"><b>Definition:</b> <a href="a00680_source.html#l00305">ex.c:305</a></div></div>
<div class="ttc" id="aa02605_html_a3b0790cb5dc5ebed344f79adcd7d8fa0"><div class="ttname"><a href="a02605.html#a3b0790cb5dc5ebed344f79adcd7d8fa0">tagDISPLAYINFO::cPlanes</a></div><div class="ttdeci">UINT cPlanes</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01582">user.h:1582</a></div></div>
<div class="ttc" id="aa02513_html_ad47c3c3836f1cb6cfb9ee4dd5d344496"><div class="ttname"><a href="a02513.html#ad47c3c3836f1cb6cfb9ee4dd5d344496">tagSERVERINFO::rcWork</a></div><div class="ttdeci">RECT rcWork</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01007">user.h:1007</a></div></div>
<div class="ttc" id="aa00665_html_a659e9e6483dce7cb60583d9b35f14de4"><div class="ttname"><a href="a00665.html#a659e9e6483dce7cb60583d9b35f14de4">DM_INTERNAL_VALID_FLAGS</a></div><div class="ttdeci">#define DM_INTERNAL_VALID_FLAGS</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00050">drvsup.c:50</a></div></div>
<div class="ttc" id="aa00665_html_a998b6ce5633527f762d09b0f887e633f"><div class="ttname"><a href="a00665.html#a998b6ce5633527f762d09b0f887e633f">AttachedSettings</a></div><div class="ttdeci">static LPWSTR AttachedSettings[]</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00742">drvsup.c:742</a></div></div>
<div class="ttc" id="aa00563_html_a074685e97e89d6aa2accdfcb82328699"><div class="ttname"><a href="a00563.html#a074685e97e89d6aa2accdfcb82328699">DWORD</a></div><div class="ttdeci">ddeml v[i&lt; inst &gt;][t&lt; type &gt;][hObj|pObj] Dump DDEML state information ddeml lists all ddeml instances for this process n ddeml t&lt; type &gt; lists all ddeml objects of the given type n n assumes link is first DWORD</div><div class="ttdef"><b>Definition:</b> <a href="a00563_source.html#l00175">exts.h:175</a></div></div>
<div class="ttc" id="aa00665_html_a744babe1f701ee80c5d81250e69c4db5"><div class="ttname"><a href="a00665.html#a744babe1f701ee80c5d81250e69c4db5">UserSaveCurrentMode</a></div><div class="ttdeci">VOID UserSaveCurrentMode(PDESKTOP pDesktop, PPHYSICAL_DEV_INFO physinfo, LPDEVMODEW lpdevmodeInformation)</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00173">drvsup.c:173</a></div></div>
<div class="ttc" id="aa03212_html_a49402fd1bea89e835e5bc8bc96de744f"><div class="ttname"><a href="a03212.html#a49402fd1bea89e835e5bc8bc96de744f">FillRect</a></div><div class="ttdeci">int APIENTRY FillRect(HDC hdc, LPCRECT prc, HBRUSH hBrush)</div><div class="ttdef"><b>Definition:</b> <a href="a03212_source.html#l00029">rtl/draw.c:29</a></div></div>
<div class="ttc" id="aa00665_html_a64f37a06db6b3bcaf0b9bb15887675e6"><div class="ttname"><a href="a00665.html#a64f37a06db6b3bcaf0b9bb15887675e6">UserLoadDisplayDriver</a></div><div class="ttdeci">HDEV UserLoadDisplayDriver(PPHYSICAL_DEV_INFO physinfo, PUNICODE_STRING deviceName, PUNICODE_STRING pstrDisplayDriver, LPDEVMODEW lpdevmodeInformation, BOOL bDefaultDisplay, BOOL bMulti, PDEVICE_LOCK *pDevLock)</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l01326">drvsup.c:1326</a></div></div>
<div class="ttc" id="aa02605_html"><div class="ttname"><a href="a02605.html">tagDISPLAYINFO</a></div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01564">user.h:1564</a></div></div>
<div class="ttc" id="aa00371_html_a41f433389f20db57f042022a662e96de"><div class="ttname"><a href="a00371.html#a41f433389f20db57f042022a662e96de">RIP_WARNING</a></div><div class="ttdeci">#define RIP_WARNING</div><div class="ttdef"><b>Definition:</b> <a href="a00371_source.html#l00029">winerrp.h:29</a></div></div>
<div class="ttc" id="aa00665_html_a9060b90d884ff96a08e71aec773de234"><div class="ttname"><a href="a00665.html#a9060b90d884ff96a08e71aec773de234">UserDriverExtraCallback</a></div><div class="ttdeci">NTSTATUS UserDriverExtraCallback(PWSTR ValueName, ULONG ValueType, PVOID ValueData, ULONG ValueLength, PVOID Context, PVOID EntryContext)</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00757">drvsup.c:757</a></div></div>
<div class="ttc" id="aa02601_html_a19e507bdf81c67304d8ba81c600ac0eb"><div class="ttname"><a href="a02601.html#a19e507bdf81c67304d8ba81c600ac0eb">tagPHYSICAL_DEV_INFO::szNtDeviceName</a></div><div class="ttdeci">WCHAR szNtDeviceName[16]</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01545">user.h:1545</a></div></div>
<div class="ttc" id="aa03257_html_a49d76150714c65558a2481eef6093659"><div class="ttname"><a href="a03257.html#a49d76150714c65558a2481eef6093659">gpdiStatic</a></div><div class="ttdeci">PDESKTOPINFO gpdiStatic</div><div class="ttdef"><b>Definition:</b> <a href="a03257_source.html#l00089">kernel/globals.c:89</a></div></div>
<div class="ttc" id="aa02605_html_a263f5b35c44d9f9ae5c74acae8037644"><div class="ttname"><a href="a02605.html#a263f5b35c44d9f9ae5c74acae8037644">tagDISPLAYINFO::rcScreen</a></div><div class="ttdeci">RECT rcScreen</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01570">user.h:1570</a></div></div>
<div class="ttc" id="aa02801_html_a7865078d53afb2719414b44d87f75c5d"><div class="ttname"><a href="a02801.html#a7865078d53afb2719414b44d87f75c5d">tagDESKTOP::pDispInfo</a></div><div class="ttdeci">PDISPLAYINFO pDispInfo</div><div class="ttdef"><b>Definition:</b> <a href="a00899_source.html#l01707">userk.h:1707</a></div></div>
<div class="ttc" id="aa02605_html_a5e0929a8ef013061be966961b2eddbff"><div class="ttname"><a href="a02605.html#a5e0929a8ef013061be966961b2eddbff">tagDISPLAYINFO::pDevLock</a></div><div class="ttdeci">LPVOID pDevLock</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01577">user.h:1577</a></div></div>
<div class="ttc" id="aa00665_html_a368e1b12420426ae8aaea867a5a40c98"><div class="ttname"><a href="a00665.html#a368e1b12420426ae8aaea867a5a40c98">__EnumDisplayQueryRoutine</a></div><div class="ttdeci">NTSTATUS __EnumDisplayQueryRoutine(IN PWSTR ValueName, IN ULONG ValueType, IN PVOID ValueData, IN ULONG ValueLength, IN PVOID Context, IN PVOID EntryContext)</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00515">drvsup.c:515</a></div></div>
<div class="ttc" id="aa00665_html_a1496fe4e3afa850f6bd625b0c3542b78"><div class="ttname"><a href="a00665.html#a1496fe4e3afa850f6bd625b0c3542b78">UserGetDisplayDriverParameters</a></div><div class="ttdeci">NTSTATUS UserGetDisplayDriverParameters(PUNICODE_STRING deviceName, PDEVMODEW pdevmode, BOOL bEmptyDevmode)</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00799">drvsup.c:799</a></div></div>
<div class="ttc" id="aa02889_html_abb1184e0c5805b5ad89b79dcc2bd17c8"><div class="ttname"><a href="a02889.html#abb1184e0c5805b5ad89b79dcc2bd17c8">tagTHREADINFO::rpdesk</a></div><div class="ttdeci">PDESKTOP rpdesk</div><div class="ttdef"><b>Definition:</b> <a href="a00899_source.html#l02288">userk.h:2288</a></div></div>
<div class="ttc" id="aa02605_html_a2458aa3b22e3415ba05fc9fba634628d"><div class="ttname"><a href="a02605.html#a2458aa3b22e3415ba05fc9fba634628d">tagDISPLAYINFO::cyPixelsPerInch</a></div><div class="ttdeci">UINT cyPixelsPerInch</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01581">user.h:1581</a></div></div>
<div class="ttc" id="aa02601_html_a11272e040ff3989da159f50e88b7b8c6"><div class="ttname"><a href="a02601.html#a11272e040ff3989da159f50e88b7b8c6">tagPHYSICAL_DEV_INFO::cbdevmodeInfo</a></div><div class="ttdeci">ULONG cbdevmodeInfo</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01552">user.h:1552</a></div></div>
<div class="ttc" id="aa00899_html_ac2181d07596893ed44d18aa267ce4d23"><div class="ttname"><a href="a00899.html#ac2181d07596893ed44d18aa267ce4d23">LeaveCrit</a></div><div class="ttdeci">VOID LeaveCrit(VOID)</div></div>
<div class="ttc" id="aa00899_html_afc13cb8b9a1ddb236b66ee390aa8efdda6760d6d8884c7ede93accae00a0e84b1"><div class="ttname"><a href="a00899.html#afc13cb8b9a1ddb236b66ee390aa8efdda6760d6d8884c7ede93accae00a0e84b1">DispDriverParamDefault</a></div><div class="ttdeci">@ DispDriverParamDefault</div><div class="ttdef"><b>Definition:</b> <a href="a00899_source.html#l03345">userk.h:3345</a></div></div>
<div class="ttc" id="aa00665_html_accf086041259110de4bd6aac57f64279"><div class="ttname"><a href="a00665.html#accf086041259110de4bd6aac57f64279">DEFAULT_POS_VALUE</a></div><div class="ttdeci">#define DEFAULT_POS_VALUE</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00048">drvsup.c:48</a></div></div>
<div class="ttc" id="aa02601_html_a671c14f1e07dff0246711968044db9c4"><div class="ttname"><a href="a02601.html#a671c14f1e07dff0246711968044db9c4">tagPHYSICAL_DEV_INFO::pDeviceHandle</a></div><div class="ttdeci">PVOID pDeviceHandle</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01546">user.h:1546</a></div></div>
<div class="ttc" id="aa02605_html_a81fb25d8b2c4e7012c2225397f6fe699"><div class="ttname"><a href="a02605.html#a81fb25d8b2c4e7012c2225397f6fe699">tagDISPLAYINFO::hdcBits</a></div><div class="ttdeci">HDC hdcBits</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01568">user.h:1568</a></div></div>
<div class="ttc" id="aa00656_html_a90ee9bcff7d18cc35574aa5a0b21d376"><div class="ttname"><a href="a00656.html#a90ee9bcff7d18cc35574aa5a0b21d376">UserResetDisplayDevice</a></div><div class="ttdeci">VOID UserResetDisplayDevice(HDEV hdev)</div><div class="ttdef"><b>Definition:</b> <a href="a00656_source.html#l02159">desktop.c:2159</a></div></div>
<div class="ttc" id="aa00665_html_a8c6e355920ecb443e8d0f47bfbfff26d"><div class="ttname"><a href="a00665.html#a8c6e355920ecb443e8d0f47bfbfff26d">UserReleaseDevmodeList</a></div><div class="ttdeci">VOID UserReleaseDevmodeList(PPHYSICAL_DEV_INFO physinfo)</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l01942">drvsup.c:1942</a></div></div>
<div class="ttc" id="aa00935_html_a31ccccdb469eefbb55d18b71a26af0da"><div class="ttname"><a href="a00935.html#a31ccccdb469eefbb55d18b71a26af0da">CopyRect</a></div><div class="ttdeci">BOOL APIENTRY CopyRect(LPRECT prcDst, CONST RECT *prcSrc)</div><div class="ttdef"><b>Definition:</b> <a href="a00935_source.html#l00391">rect.c:391</a></div></div>
<div class="ttc" id="aa02605_html_ad3e0b5376b5114f4269df20805a3a85e"><div class="ttname"><a href="a02605.html#ad3e0b5376b5114f4269df20805a3a85e">tagDISPLAYINFO::cxPixelsPerInch</a></div><div class="ttdeci">UINT cxPixelsPerInch</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01580">user.h:1580</a></div></div>
<div class="ttc" id="aa03257_html_aa88de52d1162c4701fb38718c5b75b24"><div class="ttname"><a href="a03257.html#aa88de52d1162c4701fb38718c5b75b24">ghdcMem2</a></div><div class="ttdeci">HDC ghdcMem2</div><div class="ttdef"><b>Definition:</b> <a href="a03257_source.html#l00400">kernel/globals.c:400</a></div></div>
<div class="ttc" id="aa00020_html_ad760da1dd81d9e84dee607d18edfde39"><div class="ttname"><a href="a00020.html#ad760da1dd81d9e84dee607d18edfde39">gpsi</a></div><div class="ttdeci">PSERVERINFO gpsi</div><div class="ttdef"><b>Definition:</b> <a href="a00020_source.html#l00039">clglobal.c:39</a></div></div>
<div class="ttc" id="aa03257_html_a9744bfca19a1b2f747cb8816a7685cd8"><div class="ttname"><a href="a03257.html#a9744bfca19a1b2f747cb8816a7685cd8">strDisplayDriver</a></div><div class="ttdeci">UNICODE_STRING strDisplayDriver</div><div class="ttdef"><b>Definition:</b> <a href="a03257_source.html#l00322">kernel/globals.c:322</a></div></div>
<div class="ttc" id="aa02601_html_a8ce83830b42b65fa6b57fbf904555e08"><div class="ttname"><a href="a02601.html#a8ce83830b42b65fa6b57fbf904555e08">tagPHYSICAL_DEV_INFO::cOwnCount</a></div><div class="ttdeci">ULONG cOwnCount</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01549">user.h:1549</a></div></div>
<div class="ttc" id="aa02601_html_a1fe37d9234f46b11eab06dbfbafab7e9"><div class="ttname"><a href="a02601.html#a1fe37d9234f46b11eab06dbfbafab7e9">tagPHYSICAL_DEV_INFO::devmodeInfo</a></div><div class="ttdeci">PDEVMODEW devmodeInfo</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01553">user.h:1553</a></div></div>
<div class="ttc" id="aa00665_html_a80592f8b0ad68fc0311741b0cbf6e01aa58218890fafaa0643a59e9294a9843d0"><div class="ttname"><a href="a00665.html#a80592f8b0ad68fc0311741b0cbf6e01aa58218890fafaa0643a59e9294a9843d0">DispDriverRegGlobal</a></div><div class="ttdeci">@ DispDriverRegGlobal</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00031">drvsup.c:31</a></div></div>
<div class="ttc" id="aa00371_html_a002956db9fb529e159fb441f09f39b42"><div class="ttname"><a href="a00371.html#a002956db9fb529e159fb441f09f39b42">RIPNTERR0</a></div><div class="ttdeci">#define RIPNTERR0(idErr, flags, szFmt)</div><div class="ttdef"><b>Definition:</b> <a href="a00371_source.html#l00125">winerrp.h:125</a></div></div>
<div class="ttc" id="aa02513_html_ab4a2b5b4deef4d2014cbe6c3bb434b41"><div class="ttname"><a href="a02513.html#ab4a2b5b4deef4d2014cbe6c3bb434b41">tagSERVERINFO::gclBorder</a></div><div class="ttdeci">int gclBorder</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l00982">user.h:982</a></div></div>
<div class="ttc" id="aa00665_html_a2629889fd8bf33088b544b6c3128707a"><div class="ttname"><a href="a00665.html#a2629889fd8bf33088b544b6c3128707a">DefaultSettings</a></div><div class="ttdeci">static LPWSTR DefaultSettings[8]</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l00730">drvsup.c:730</a></div></div>
<div class="ttc" id="aa02601_html_a19bee6963f84c40169f417b39bc46059"><div class="ttname"><a href="a02601.html#a19bee6963f84c40169f417b39bc46059">tagPHYSICAL_DEV_INFO::pCurrentDevmode</a></div><div class="ttdeci">PDEVMODEW pCurrentDevmode</div><div class="ttdef"><b>Definition:</b> <a href="a00365_source.html#l01551">user.h:1551</a></div></div>
<div class="ttc" id="aa00665_html_ae1691bdb53d715053026f55f68e5d3f4"><div class="ttname"><a href="a00665.html#ae1691bdb53d715053026f55f68e5d3f4">UserFreeDevice</a></div><div class="ttdeci">VOID UserFreeDevice(PPHYSICAL_DEV_INFO physInfo)</div><div class="ttdef"><b>Definition:</b> <a href="a00665_source.html#l01721">drvsup.c:1721</a></div></div>
<div class="ttc" id="aa02801_html_a7670d05ec8727e45af6446b08a8e078c"><div class="ttname"><a href="a02801.html#a7670d05ec8727e45af6446b08a8e078c">tagDESKTOP::pDesktopDevmode</a></div><div class="ttdeci">PDEVMODE pDesktopDevmode</div><div class="ttdef"><b>Definition:</b> <a href="a00899_source.html#l01705">userk.h:1705</a></div></div>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_885cc87fac2d91e269af0a5a959fa5f6.html">E:</a></li><li class="navelem"><a class="el" href="dir_4e091ed8704426a7a4980368ba259fde.html">git</a></li><li class="navelem"><a class="el" href="dir_cd70cb5eb491250157f2d55d3ff4b13e.html">backup</a></li><li class="navelem"><a class="el" href="dir_ba2b673b566ba104b956abdc6dec0552.html">org</a></li><li class="navelem"><a class="el" href="dir_5bb0003d7907b45051943541418399f5.html">ntuser</a></li><li class="navelem"><a class="el" href="dir_2a0a56546b70a0973705719e6a88eab3.html">kernel</a></li><li class="navelem"><a class="el" href="a00665.html">drvsup.c</a></li>
<li class="footer">制作者
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
</ul>
</div>
</body>
</html>
HTML
1
https://gitee.com/cbwang505/win32k.git
git@gitee.com:cbwang505/win32k.git
cbwang505
win32k
win32k
master

搜索帮助

14c37bed 8189591 565d56ea 8189591